MFC 非模式对话框的销毁
我在线程中创建了一个非模式对话框,想在线程执行到最后的时候把这个非模式对话框给删掉,但是
inportDlg->DestroyWindow();时程序崩掉了。不知道什么原因。那位知道帮忙指点下。
[解决办法]
原因很多,大多数的情况是你的对话框销毁掉了,资源不存在了,可以你的线程什么的还在运行并访问,便出了异常
[解决办法]
delete inportDlg试试
[解决办法]
MSDN上有告诉你,非模态对话框如何销毁:
When you implement a modeless dialog box, always override the OnCancel member function and call DestroyWindow from within it. Don't call the base class CDialog::OnCancel, because it calls EndDialog, which will make the dialog box invisible but will not destroy it. You should also override PostNcDestroy for modeless dialog boxes in order to delete this, since modeless dialog boxes are usually allocated with new. Modal dialog boxes are usually constructed on the frame and do not need PostNcDestroy cleanup.
[解决办法]
把你的代码亮出来大家帮你找原因啊
[解决办法]
inportDlg->DestroyWindow();
就不用放到线程里做了,该在主线程里做吧~
[解决办法]
放在其他线程里面销毁肯定有问题,楼主既然用了线程,应该知道多线程编程有个同步与互斥的问题,这个问题不但对普通数据有效,对窗口同样有效,所以应该在主线程中销毁。
当然,楼主希望实现线程退出的时候非模态对话框销毁也是有方法的,可以使用自定义消息的方式。看了楼主的程序,楼主在线程函数的结尾调用了一个PostMessage向inportSuccDlg窗口发送消息,那应该楼主也有响应该消息的程序了,这样的话,楼主可在那个响应程序那里调用inportDlg->DestroyWindow();然后delete
[解决办法]
像inportSuccDlg一样 发消息到主线程 主线程再delete就可以了 不用调DestroyWindow
[解决办法]
void CYourDlg::CloseNotify(WMPARA wparam,LPARAM lparam)
{
this->PostMessage(WM_CLOSE,0,0);
}