MFC:在运行时设置控件的位置
MFC: Set controls position at runtime
我有一个mfc对话框窗口,其中包含一些按钮控件和一个activeX web浏览器控件。现在,我在对话框窗口上拖放控件,这样它们的位置就有点硬编码,而不是相对于对话框。我想在运行时对话框窗口打开时设置它们的位置。
我试着做SetWindowPos(GetDlgItem(IDC_EXPLORER), 0,0,a,b,1);
,但什么都没做。我还能尝试什么?
SetWindowPos就是您刚刚使用错误的参数。您已经指定了SWP_NOSIZE的最后一个标志,但我认为这不是您想要的。试试这个:
GetDlgItem(IDC_EXPLORER)->SetWindowPos( NULL, 0, 0, a, b, SWP_NOZORDER | SWP_NOMOVE | SWP_SHOWWINDOW );
如果您希望根据父控件动态调整控件大小。这里有一个绝对的解决方案:
http://www.codeguru.com/cpp/misc/misc/article.php/c323/Method-to-achieve-repositioningresizing-of-child-controls.htm
您的问题不清楚是只想更改窗口的x-/y位置还是同时更改z位置。我想你只想x-/y移动它。
您需要在要更改其位置的窗口上应用SetWindowPos。您不会将窗口传递到SetWindowPos。请不要将1作为标志传递,请传递SWP_定义。
GetDlgItem(IDC_EXPLORER)->SetWindowPos(&wndTop, 0, 0, a, b, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOZORDER);
或者更简单:
GetDlgItem(IDC_EXPLORER)->MoveWindow(0, 0, a, b);
如果您有很多控件,将DeferWindowPos
与BeginDeferWindowPos
和EndDeferWindowPos
结合使用可以提高性能并减少闪烁。
来自Raymond Chen的样品:
HDWP hdwp = BeginDeferWindowPos(2);
int cxHalf = cx/2;
if (hdwp) hdwp = DeferWindowPos(hdwp, g_hwndChildren[0],
NULL, 0, 0, cxHalf, cy,
SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOACTIVATE);
if (hdwp) hdwp = DeferWindowPos(hdwp, g_hwndChildren[1],
NULL, cxHalf, 0, cx-cxHalf, cy,
SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOACTIVATE);
if (hdwp) EndDeferWindowPos(hdwp);
相关文章:
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- 如何更改窗体上所有控件的标题?[C++生成器]
- 双击更改 mfc 中列表控件中的行的颜色
- 派生的 wxPanel 控件如何访问其中包含 wxDialog 中的数据?
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- 当光标位置在编辑控件 MFC 中更改时是否有通知代码?
- 如何正确删除一行控件并在该位置动态创建一个新控件
- 如何获取资源文件中对话框的按钮控件的大小和位置
- C++获取对话框控件的位置和大小
- 如何在VC++中将图像放置在图片控件的特定位置
- gdb控件跳转到随机位置
- 查找控件相对于其父窗口的位置的最佳方法是什么?
- 如何在 MFC 的对话框中设置控件的初始位置?
- MFC:在运行时设置控件的位置
- 如何改变下一个字符将被放置在MFC编辑控件中的位置
- 如何保持控件MFC的TopMost位置
- 在c++中找到控件的位置
- 从文本控件中检索字符位置的客户端区域坐标