如何获取资源文件中对话框的按钮控件的大小和位置?

时间:2019-04-19 07:23:50

标签: c++ mfc

我正在尝试以编程方式设计一个对话框菜单,该菜单根据屏幕的分辨率进行调整大小,并且能够根据以下问题使用对话框的nameID获取对话框的大小和位置:

Get Dialog Size as defined in resource file

但是,我在尝试获取对话框中按钮控件的大小和位置时遇到了麻烦。这是该对话框在资源文件中的外观示例:

IDD_DLG DIALOG  0, 0, 300, 200
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,30,46,42,18
    PUSHBUTTON      "Cancel",IDCANCEL,145,46,42,18
END

我可以使用对话框的nameIDIDD_DLG来获取对话框的大小和位置,但是可以通过编程方式为DEFPUSHBUTTONPUSHBUTTON获得相同的内容吗?

如果是,怎么办?谢谢!

1 个答案:

答案 0 :(得分:0)

MFC允许自动重新定位/调整子按钮的大小。在资源属性页面中,单击对话框按钮,转到“动态控制”部分,为每个按钮启用动态调整大小/移动。

要找到按钮相对于对话框客户端窗口左上角的坐标:

使用GetWindowRect在屏幕坐标中找到矩形的按钮。然后将屏幕坐标转换为客户端坐标:

CMyDialog::OnInitDialog()
{
    CDialog::OnInitDialog();
    CRect rc;
    CWnd *wnd = GetDlgItem(IDOK);
    wnd->GetWindowRect(&rc);
    ScreenToClient(rc);
    ...
    //move/resize rc
    wnd->SetWindowRect(NULL, rc.left, rc.top, rc.Width(), rc.Height(), SWP_SHOWWINDOW);
}
相关问题