¸¸µé±â, ¿­°Å ÇÏ °í ÀÚ½Ä Ã¢ Å©±â Á¶Á¤

ÀÚ½Ä Ã¢À» »ç¿ë ÇÏ ¿© ¼­·Î ´Ù¸¥ ±â´É ¿µ¿ª¿¡´Â â Ŭ¶óÀÌ¾ðÆ® ¿µ¿ªÀ» ³ª´­ ¼ö ÀÖ½À´Ï´Ù. ÁÖ Ã¢ ¸¸µé±â´Â ÀÚ½Ä Ã¢ ¸¸µé±â- CreateWindowEx ÇÔ¼ö¸¦ »ç¿ë ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ Á¤ÀÇ Ã¢ Ŭ·¡½ºÀÇ Ã¢À» ¸¸µé·Á¸é â Ŭ·¡½º¸¦ µî·Ï ÇÏ °í ÀÚ½Ä Ã¢ ¸¸µé±â Àü¿¡ â ÇÁ·Î½ÃÀú¸¦ Á¦°ø ÇØ¾ß ÇÕ´Ï´Ù. ÀÚ½Ä Ã¢ WS_CHILD ½ºÅ¸ÀÏÀÌ Á¦°ø ÇÏ °í ¸¸µé ¶§ ÀÚ½Ä Ã¢¿¡ ´ë ÇÑ ºÎ¸ð â ÁöÁ¤ ÇØ¾ß.

´ÙÀ½ ¿¹Á¦¿¡¼­´Â µ¿ÀÏÇÑ Å©±âÀÇ ¼¼ °¡Áö ÀÚ½Ä Ã¢À» »ý¼º ÇÏ ¿© ¼¼ °³ÀÇ ±â´É ¿µ¿ªÀ¸·Î ÀÀ¿ë ÇÁ·Î±×·¥ âÀÇ Å¬¶óÀÌ¾ðÆ® ¿µ¿ªÀ» ³ª´¯´Ï´Ù. °¢ ÀÚ½Ä Ã¢À» ÁÖ Ã¢ÀÇ Å¬¶óÀÌ¾ðÆ® ¿µ¿ª ³ôÀÌ ÇÏÁö¸¸ °¢°¢ 1 / 3ÀÇ ³ÊºñÀÔ´Ï´Ù. ¸ÞÀÎ À©µµ¿ì âÀ» ÁÖ Ã¢ÀÇ ÀÚü â »ý¼º ÇÁ·Î¼¼½º µ¿¾È ¹Þ´Â WM_CREATE ¸Þ½ÃÁö¿¡ ÀÚ½ÄÀ» ¸¸µì´Ï´Ù. ¶§¹®¿¡ °¢ ÀÚ½Ä Ã¢ WS_BORDER ½ºÅ¸ÀÏ, ¸¶´Ù°¡ ¼± Å׵θ®. ¶ÇÇÑ, WS_VISIBLE ½ºÅ¸ÀÏ ÁöÁ¤ µÇ¾î ÀÖÁö ¾ÊÀ¸¹Ç·Î °¢ ÀÚ½Ä Ã¢Àº óÀ½¿¡ ¼û°ÜÁ® ÀÖ½À´Ï´Ù. ¶ÇÇÑ °¢ ÀÚ½Ä Ã¢ÀÇ ÀÚ½Ä Ã¢ ½Äº°ÀÚ ÇÒ´ç µË´Ï´Ù °øÁö »çÇ×.

ÁÖ Ã¢ Å©±â ¹× À§Ä¡¸¦ ÀÚ½Ä Ã¢À» ÁÖ Ã¢ÀÇ Å©±â°¡ º¯°æ µÉ ¶§ ¹Þ´Â WM_SIZE ¸Þ½ÃÁö¿¡ ÀÀ´ä¿¡¼­ ÇÕ´Ï´Ù. WM_SIZE¿¡ ´ëÀÀ, ÁÖ Ã¢ GetWindowRect ÇÔ¼ö¸¦ »ç¿ë ÇÏ ¿© Ŭ¶óÀÌ¾ðÆ® ¿µ¿ª Å©±â¸¦ °Ë»ö ÇÏ °í Å©±â¸¦ EnumChildWindows ÇÔ¼ö¿¡ Àü´Þ ÇÕ´Ï´Ù. EnumChildWindows EnumChildProc ÀÀ¿ë ÇÁ·Î±×·¥ Á¤ÀÇ Äݹé ÇÔ¼ö¸¦ Â÷·Ê·Î °¢ ÀÚ½Ä Ã¢¿¡ ´ë ÇÑ ÇÚµéÀ» Àü´ÞÇÕ´Ï´Ù. ÀÌ ±â´ÉÀº Å©±â ¹× MoveWindow ÇÔ¼ö; È£Ãâ ÇÏ ¿© °¢ ÀÚ½Ä Ã¢ À§Ä¡ Å©±â¿Í À§Ä¡¸¦ ÁÖ Ã¢ Ŭ¶óÀÌ¾ðÆ® ¿µ¿ªÀÇ Å©±â ¹× ÀÚ½Ä Ã¢ ½Äº°ÀÚ¿¡ ±â¹Ý ÇÕ´Ï´Ù. EnumChildProc âÀ» º¼ ¼ö ÀÖµµ·Ï ShowWindow ÇÔ¼ö¸¦ È£Ãâ ÇÏ´Â ÀÌÈÄ¿¡,.

#define ID_FIRSTCHILD  100 
#define ID_SECONDCHILD 101 
#define ID_THIRDCHILD  102 
 
LONG APIENTRY MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    RECT rcClient; 
    int i; 
 
    switch(uMsg) 
    { 
        case WM_CREATE: // creating main window  
 
            // Create three invisible child windows. 
 
            for (i = 0; i < 3; i++) 
            { 
                CreateWindowEx( 
                    0, 
                    "ChildWClass", 
                    (LPCTSTR) NULL, 
                    WS_CHILD | WS_BORDER, 
                    0,0,0,0, 
                    hwnd, 
                    (HMENU) (int) (ID_FIRSTCHILD + i), 
                    hinst, 
                    NULL); 
            }
 
            return 0; 
 
        case WM_SIZE:   // main window changed size 
 
            // Get the dimensions of the main window's client 
            // area, and enumerate the child windows. Pass the 
            // dimensions to the child windows during enumeration. 
 
            GetClientRect(hwnd, &rcClient); 
            EnumChildWindows(hwnd, EnumChildProc, 
                (LPARAM) &rcClient); 
            return 0; 
        // Process other messages. 
 
    } 
    return DefWindowProc(hwnd, uMsg, wParam, lParam); 
} 
 
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) 
{ 
    LPRECT rcParent; 
    int i, idChild; 
 
    // Retrieve the child-window identifier. Use it to set the 
    // position of the child window. 
 
    idChild = GetWindowLong(hwndChild, GWL_ID); 
 
    if (idChild == ID_FIRSTCHILD) 
        i = 0; 
    else if (idChild == ID_SECONDCHILD) 
        i = 1; 
    else 
        i = 2; 
 
    // Size and position the child window.  
 
    rcParent = (LPRECT) lParam; 
    MoveWindow(hwndChild, 
        (rcParent->right / 3) * i, 
        0, 
        rcParent->right / 3, 
        rcParent->bottom, 
        TRUE); 
 
    // Make sure the child window is visible. 
 
    ShowWindow(hwndChild, SW_SHOW); 
 
    return TRUE; 
} 
 

 

Index