今天遇到一个很久很久很久之前碰到的MFC问题,开始的时候有些烦闷,代码都是一样的,但却有两个对话框在我打开的时候,老是提示错误信息-> Debug Assertion Failed! File:winocc.cpp Line:279
经过调试及栈回溯,找到了问题的原因。
我在对话框中使用了OnSize消息,由于想使窗口在获得OnSize消息的时候自动将对话框中的控件对齐,因此在代码内定义了一个自动对齐控件的函数,这个函数直接在OnSize消息内使用了。
但是在第一次打开对话框的时候,MFC首先处理的是OnSize消息,之后才会处理OnInitDialog消息,在这种情况下,由于第一次使用自定义函数的时候窗口初始化还没有完全成功,于是MFC就提示了错误信息。
简单的处理办法是:
BOOL bFirst;
bFirst = TRUE;
在OnSize消息内:
void CShellDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if (bFirst == FALSE)
{
Resize();
}
}
在OnInitDialog消息内:
bFirst = FALSE;