今天在订制打开文件对话框的时候遇到一个问题,如下
CFileDialogEx继承自CFileDialog类,在类中自定义消息处理函数,当DoModal()后,如果用户单击了'确定'按钮会弹出一个断言,跟踪发现断言位置在CFileDialog.DoModal()函数的如下代码处
CFileDialog::DoModal()
{
...
if (nResult)
ASSERT(pThreadState->m_pAlternateWndInit == NULL);
...
}
如果不在CFileDialogEx中实现自已的消息函数就不会出现断言,不如是什么原因?
我的消息处理函数没做任何事情,但同样出错,代码如下.
CFileDialogEx::CFileDialogEx(...) :
CFileDialog(...)
{ m_ofn.Flags |= OFN_ENABLEHOOK | OFN_ENABLETEMPLATE |OFN_HIDEREADONLY;
m_ofn.lpTemplateName = "TemplateDlg";
//去掉下面的代码去找就不会弹出断言
m_ofn.lpfnHook = (LPOFNHOOKPROC)FileDlgProc;//钩子
}
LRESULT CALLBACK FileDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return false;
}
CFileDialogEx继承自CFileDialog类,在类中自定义消息处理函数,当DoModal()后,如果用户单击了'确定'按钮会弹出一个断言,跟踪发现断言位置在CFileDialog.DoModal()函数的如下代码处
CFileDialog::DoModal()
{
...
if (nResult)
ASSERT(pThreadState->m_pAlternateWndInit == NULL);
...
}
如果不在CFileDialogEx中实现自已的消息函数就不会出现断言,不如是什么原因?
我的消息处理函数没做任何事情,但同样出错,代码如下.
CFileDialogEx::CFileDialogEx(...) :
CFileDialog(...)
{ m_ofn.Flags |= OFN_ENABLEHOOK | OFN_ENABLETEMPLATE |OFN_HIDEREADONLY;
m_ofn.lpTemplateName = "TemplateDlg";
//去掉下面的代码去找就不会弹出断言
m_ofn.lpfnHook = (LPOFNHOOKPROC)FileDlgProc;//钩子
}
LRESULT CALLBACK FileDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return false;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货