扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
void CView::OnOpenDlg(void)
{
CDialog *dlg=new CDlg;
dlg->Create(IDD_DLG,NULL); //IDD_DLG为已经定义的对话框资源的ID号
dlg->ShowWindows(SW_SHOW);
}
在上面的代码中我们新生成了一个对话框对象,而且在退出函数时并没有销毁该对象。因为如果此时销毁该对象(对象被销毁时窗口同时被销毁),而此时对话框还在显示就会出现错误。所以我们可以在对话框退出时销毁自己:在对话框中重载OnOK与OnCancel在函数中调用父类的同名函数,然后调用DestroyWindow()强制销毁窗口,在消息处理函数中调用delete this; 强行删除自身对象。相关代码如下:
void CTestDlg1::OnOK()
{
CDialog::OnOK();
DestroyWindow();
}
void CTestDlg1::OnCancel()
{
CDialog::OnCancel();
DestroyWindow();
}
void CTestDlg1::OnDestroy()
{
CDialog::OnDestroy();
AfxMessageBox("call delete this");
delete this;
}
这种方法的要点是在窗口被销毁的时候,删除自身对象。所以你可以在任何时候调用DestroyWindow()以达到彻底销毁自身对象的作用。(DestroyWindow()的调用会引起OnDestroy()的调用)
对于模式对话框只需要调用DoModal();即可,而且在退出对话框时自动销毁该对象:
void CView::OnOpenDlg(void)
{
CDialog dlg;
dlg.DoModal();
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1583085
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者