- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要我的 6 个控件(主窗口的子窗口)在用户调整主窗口大小时(拖动角)变大。我想我可以通过使用 MoveWindow 函数来更改主窗口的 WM_SIZE 或 WM_SIZING 函数中每个子项的比例来完成此操作。这样做会使调试版本变得奇怪(多个窗口、退出后窗口图像停留等)。发布版本运行良好,但当我调整主窗口大小时,子窗口没有改变。
我找到了 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;
}
}
最佳答案
来自 MSDN's article on WM_SIZE :“如果由于 WM_SIZE 消息而为子窗口调用 SetScrollPos 或 MoveWindow 函数,则 bRedraw 或 bRepaint 参数应为非零值以导致重新绘制窗口。”我怀疑子控件正在移动,它们只是没有被重新绘制。
验证您的 switch case 是否真的被击中也可能是值得的。
编辑:我错过了显而易见的事情。您正在响应 WM_SIZING,这表明窗口的大小即将(但尚未)更改。 WM_SIZE 表示大小已经改变。如果要使用WM_SIZING,需要使用lParam中携带的rect,而不是GetClientRect的结果。不幸的是,WM_SIZING 矩形是窗口的矩形,而不是客户区,并且在屏幕坐标中。除非您真的需要在用户仍在执行调整大小的同时显示调整大小的控件,否则只处理 WM_SIZE 消息会容易得多。
关于c++ - 将子窗口停靠到父窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5068833/
如何将 CControlBar 派生窗口停靠到拆分窗口 (CSplitterWnd) 的中间?我希望在移动分离器时重新定位栏。 为了更清楚地说明我所追求的是什么,想象一下 Visual Studio(
我正在使用我认为是在 90 年代初开发的 MFC 代码。我被赋予了将软件带入 21 世纪的艰巨任务,使其能够在 Windows 7/8 之类的系统上运行。该应用程序面向众多平台,其中一个是 Windo
我有一个导航 View ,在导航 View 中我想在导航栏的右侧放置一个按钮 here is sencha fiddle My Fiddle is here 你可以看到我的菜单按钮,我希望该按钮位于右
我创建了以下 fiddle 来说明问题 http://jsfiddle.net/spjvo6g2/ 如何将activelist等子div停靠到父div的顶部垂直对齐
我是一名优秀的程序员,十分优秀!