Мне нужно, чтобы мои 6 элементов управления (дочерние окна главного окна) увеличивались, когда пользователь изменяет размер главного окна (перетаскивая углы). Я думал, что смогу добиться этого, используя функцию MoveWindow для изменения пропорций каждого дочернего элемента в функции WM_SIZE или WM_SIZING главного окна. Это сделало сборку отладки странной (несколько окон, изображение окна, застрявшего после выхода и т. д.). Сборка 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;
}
}