我不知道我在这里做错了什么。我正在尝试使用MFC实现一个调整大小的对话框窗口。代码非常简单。我覆盖以下大小调整通知:
void CMyDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
//...
//First move the groupbox, pGroupbox is of type CWnd
pGroupbox->MoveWindow(rcGroupbox);
//And then move all radio buttons in it
//Each is moved the exact same way
//pEachRadioButton is of type CWnd
pEachRadioButton->MoveWindow(rcEachRadioButton);
}但我得到的结果是。
首先,这里是最初的组框:

只有当我开始拖拽主窗口框的底部时,才会发生这种情况。我得到这个神器:

注意,单选按钮本身的位置是正确的。如果我把鼠标移到其中任何一个上面,它就会正确地重新绘制自己(就像这个“关闭”按钮):

下面是对话框本身的布局:
IDD_MY_DIALOG DIALOGEX 0, 0, 437, 190
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CAPTION "My dialog"
MENU IDR_MENU_MAIN
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
PUSHBUTTON "&Cancel",IDCANCEL,381,169,50,14
GROUPBOX "When Tasks Are Completed",IDC_STATIC_WHEN_COMPLETED,7,113,423,36
CONTROL "Close the pro&gram",IDC_RADIO_CLOSE_PROGRAM,"Button",BS_AUTORADIOBUTTON | WS_GROUP,26,129,73,8
CONTROL "Put computer to sleep",IDC_RADIO_SLEEP,"Button",BS_AUTORADIOBUTTON,122,129,84,10
CONTROL "Hibernate computer",IDC_RADIO_HIBERNATE,"Button",BS_AUTORADIOBUTTON,229,129,78,10
CONTROL "Shut down computer",IDC_RADIO_SHUT_DOWN,"Button",BS_AUTORADIOBUTTON,330,129,81,10
DEFPUSHBUTTON "&OK",IDC_BUTTON_SET,311,161,67,22
END我做了一些搜索并找到了这篇文章,但不幸的是,设置这些样式并没有修复bug。
知道怎么解决这个问题吗?
PS。我正在Windows、7或8上测试它,并启用了可视主题。
发布于 2014-05-13 00:43:00
当您移动窗口时,窗口管理器将按其存在的情况移动窗口的当前图像。不幸的是,因为你先移动了框架,所有的窗户都被剪短了。把它们翻过来一点用也没有,因为这样就会把上衣剪掉。
修复它的简单方法是在每个控件移动后调用InvalidateRect。
更好的方法是在开始移动任何东西之前调用BeginDeferWindowPos,然后在完成移动时调用EndDeferWindowPos,以便所有窗口一起移动。
Windows希望组框在选项卡顺序中位于单选按钮之后,这可能也会产生不同的效果。
https://stackoverflow.com/questions/23620829
复制相似问题