Мне нужно, чтобы мои 6 элементов управления (дочерние окна главного окна) стали больше, когда основное окно изменяется пользователем (перетаскивая углы). Я думал, что мог бы сделать это, используя функцию MoveWindow, чтобы изменить пропорции каждого дочернего элемента в функции WM_SIZE или WM_SIZING главного окна. Это сделало сборку Debug странной (несколько окон, изображение окна, торчащее после выхода и т. Д.). Сборка Release работала нормально, но дочерние окна не изменились, когда я изменил размер главного окна.
Я обнаружил, http://msdn.microsoft.com/en-us/library/ms632598%28v=VS.85%29.aspx#creating_enumerating_etc использовал другой способ сделать это: путем перечисления всех дочерних окон и функции обратного вызова enum, обрабатывающей изменение размера окна посредством уникального идентификатора, назначенного каждому дочернему элементу. После того, как я попробовал это сам, это не имело никакого значения для элементов управления при изменении размера главного окна.
Почему это не работает?
В операторе переключения основных окон:
case WM_SIZING:
GetClientRect(hwnd, &hwndRect);
EnumChildWindows(hwnd, EnumChildProc, (LPARAM)&hwndRect);
break;
Функция обратного вызова дочернего перечислителя:
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
{
LPRECT hwndRect = (LPRECT)lParam;
switch(GetWindowLong(hwndChild, GWL_ID))
{
case ID_CHILD_LLABEL:
MoveWindow(hwndChild, 0, 0, (hwndRect->right - hwndRect->left) - 30, 20, false);
break;
case ID_CHILD_LDIR:
MoveWindow(hwndChild, 12, 20, (hwndRect->right - hwndRect->left) - 40, 20, false);
break;
case ID_CHILD_LLIST:
MoveWindow(hwndChild, 12, 40, (hwndRect->right - hwndRect->left) - 40, (hwndRect->bottom - hwndRect->top) - 238, false);
break;
}
}