c++ - Groupbox 调整大小问题,顶部有单选按钮

标签 c++ windows winapi mfc dialog

我不确定我在这里做错了什么。我正在尝试使用 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);

}

但我得到的结果是这样的。

首先是初始组框:

enter image description here

只有当我开始向下拖动主窗口框架的底部时才会发生。我得到了这个神器:

enter image description here

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

enter image description here

这是对话框本身的布局:

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

我做了一些搜索,找到了 this article ,但不幸的是,设置这些样式并没有修复错误。

知道如何解决这个问题吗?

附言。我正在启用视觉主题的 Windows Vista、7 或 8 上对其进行测试。

最佳答案

当您移动一个窗口时,窗口管理器将移动该窗口的当前图像,因为它存在。不幸的是,因为您先移动了框架,所以所有这些窗口都被剪掉了。翻转它们也无济于事,因为那样顶部会被剪掉。

修复它的简单方法是在移动每个控件后调用 InvalidateRect。

更好的方法是调用 BeginDeferWindowPos在你开始移动任何东西之前,然后 EndDeferWindowPos当你完成后,所有的窗口都会一起移动。

附言Windows 更喜欢组框在选项卡顺序中单选按钮之后,这也可能会有所不同。

关于c++ - Groupbox 调整大小问题,顶部有单选按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23620829/

相关文章:

c++ - OOP - 抽象类类型,在基类和派生类中初始化变量

c++ - 错误] ISO C++ 禁止指针和整数之间的比较 [-fpermissive]

Win CE 6 的 C 文件编译

c++ - Win32 从设备上下文创建位图到文件和/或 BLOB

Perl - Win32 - 如何从另一个进程进行文件句柄的非阻塞读取?

C++ 应用程序在 64 位版本的 Windows 中崩溃,但在 32 位 Windows 上运行良好

c++ - 使用标准集时的一些问题

windows - 十六进制到十进制批处理文件

windows - WinDbg 窗口符号

c++ - 如何在 nodejs 插件中泵送窗口消息?