mfc对话框按钮rect

mfc对话框按钮rect,mfc,dialog,Mfc,Dialog,我有一个带有按钮的窗口,我想在窗口重新调整大小时将按钮固定在一个角落,但不知何故,当我试图检索按钮的rect时,抛出了一个调试断言错误 void CDaf_Alarm_ComplexDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); CRect winRect; GetWindowRect(&winRect); CRect buttonRect;

我有一个带有按钮的窗口,我想在窗口重新调整大小时将按钮固定在一个角落,但不知何故,当我试图检索按钮的
rect
时,抛出了一个
调试断言错误

void CDaf_Alarm_ComplexDlg::OnSize(UINT nType, int cx, int cy)
 {
    CDialog::OnSize(nType, cx, cy);

    CRect winRect;
    GetWindowRect(&winRect);

    CRect buttonRect;
    m_btnAnulare.GetWindowRect(&buttonRect);

    m_btnAnulare.SetWindowPos(NULL,winRect.right - buttonRect.Width(), buttonRect.top, 0, 0, SWP_NOZORDER | SWP_NOMOVE);
}
m_btnAnulare.GetWindowRect(&buttonRect)行抛出错误NULL


m_btnAnulare
是在
.h
中声明的CButton项,很可能该
CButton
尚未创建/子类化。你检查过m_hWnd会员了吗?还是
nullptr

使用
GetSafeHwnd()检查nullptr在访问它之前。

GetWindowRect()
有一个
void
返回类型。是什么让你认为它返回了
NULL
?我表达错了。我想说的是传递给
buttonRect
的值是负数。实际上,
CButton
还没有创建。但是现在,在重新定位后,按钮消失了…我必须在重新定位后调用重新绘制方法吗?我不确定您想要实现什么,但是您是否检查了调用
SetWindowPos
winRect.right-buttonRect.Width(),按钮rect.top
这些宽度和高度值有意义吗?窗口位置相对于其父窗口。为了简单起见,我只需在对话框中调用GetClientRect()。您可以在对话框上调用GetWindowRect(),但随后必须通过调用ScreenToClient()来转换坐标。