当用户调整主窗口的大小(拖动角落)时,我需要我的 6 个控件(主窗口的子窗口)变大。我想我可以通过使用 MoveWindow 函数来更改主窗口的 WM_SIZE 或 WM_SIZING 函数中每个子项的比例来实现这一点。这样做会使 Debug 构建变得奇怪(多个窗口、退出后窗口的图像等)。发布版本运行良好,但当我调整主窗口大小时,子窗口没有改变。
我发现http://msdn.microsoft.com/en-us/library/ms632598%28v=VS.85%29.aspx#creating_enumerating_etc使用了不同的方法:通过枚举所有子窗口和枚举回调通过分配给每个孩子的唯一 ID 处理窗口大小调整的函数。在我自己尝试后,调整主窗口大小时对控件没有任何影响。
为什么这不起作用?
在主窗口 switch 语句中:
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;
}
}