如何从MFC DoModal对话框中获取尺寸?

时间:2019-05-23 07:59:34

标签: c++ mfc

在我的父类中,我有一个按钮触发并执行DoModal以显示对话框的函数:

void ParentClass::OnBtnPRess() 
{
    ChildClass dialg;
    dialg.DoModal();
}

在我的ChildClass中,我以编程方式创建了对话框的自定义宽度和高度,并在SetWindowPos中进行了设置,但是我不想计算自定义xy位置。

相反,我想从调用rect并将其传递给DoModal时创建的子对话框中获取SetWindowPos的尺寸:

BOOL SetWindowPos(
  HWND hWndInsertAfter,
  int  X,
  int  Y,
  int  cx,
  int  cy,
  UINT uFlags
);

我试图做的是从GetWindowRect调用BOOL ChildClass::OnInitDialog()来查看我是否可以获得正确的rect位置,但是将其与使用 Spy ++的值进行比较,它们关闭了。

如何从DoModal调用中获取尺寸并将其用于我的ChildClass

谢谢!

例如,如果我仅单独依靠DoModal来设置对话框的尺寸,而根本不调用SetWindowPos,那么我会从 Spy ++ 获得以下内容:

enter image description here

但是,如果我尝试使用DoModalGetWindowRect获取尺寸,然后使用返回到SetWindowPos的值,则会得到以下信息:

enter image description here

x位置已关闭。我想要的是调用x产生的DoModal个职位。如建议的那样,我在ScreenToClient之后调用了ClientToScreenGetWindowRect,但是x的位置也关闭了。

更新:根据要求,OnInitDialog中的代码如下:

BOOL ChildClass::OnInitDialog()
{
    CDialog::OnInitDialog();

    RECT rect;
    GetWindowRect(&rect);

    int width;
    int height;

    // Code for calculating width and height

    SetWindowPos(&wndTop, rect.left, rect.top, width, height, SWP_SHOWWINDOW);

    return TRUE;
}

0 个答案:

没有答案