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()来转换坐标。