ÀÚ½Ä Ã¢À» »ç¿ë ÇÏ ¿© ¼·Î ´Ù¸¥ ±â´É ¿µ¿ª¿¡´Â â Ŭ¶óÀÌ¾ðÆ® ¿µ¿ªÀ» ³ª´ ¼ö ÀÖ½À´Ï´Ù. ÁÖ Ã¢ ¸¸µé±â´Â ÀÚ½Ä Ã¢ ¸¸µé±â- 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;
}