我有一个主对话框Mdlg,在Button1单击事件中创建一个非模态的对话框dlg1,我想通过再次点击Button1时销毁dlg1,在网上找了很多方法都不行,代码如下:
// MdlgDlg.cpp : 实现文件
void CMdlgDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
dlg1 *d1 = new dlg1;
d1->Create(IDD_DIALOG1,NULL);
if(flg==1)
{
d1->ShowWindow(SW_SHOW);
flg=0;
}
else
{
d1->OnCancel();
flg=1;
}
}
我在dlg1.cpp中重载函数OnCancel()和PostNcDestroy(),代码如下:
void dlg1::OnCancel(){
this->DestroyWindow();
}void dlg1::PostNcDestroy(){
CDialog::PostNcDestroy();
delete this;
}
结果点击Button1时可以显示,但再次点击却不能销毁,我设断点查看有执行this->DestroyWindow();但为何销毁不了,请大侠指教
// MdlgDlg.cpp : 实现文件
void CMdlgDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
dlg1 *d1 = new dlg1;
d1->Create(IDD_DIALOG1,NULL);
if(flg==1)
{
d1->ShowWindow(SW_SHOW);
flg=0;
}
else
{
d1->OnCancel();
flg=1;
}
}
我在dlg1.cpp中重载函数OnCancel()和PostNcDestroy(),代码如下:
void dlg1::OnCancel(){
this->DestroyWindow();
}void dlg1::PostNcDestroy(){
CDialog::PostNcDestroy();
delete this;
}
结果点击Button1时可以显示,但再次点击却不能销毁,我设断点查看有执行this->DestroyWindow();但为何销毁不了,请大侠指教
解决方案 »
- CListCtrl 获取单元格内容后,关闭对话框后,数据显示有点卡
- 赚了点外快,三分!
- Atl实现一个窗口的问题,不知道怎么定位,请高手看看
- 加载xml文件
- 如何获得exe文件所在的文件夹?
- 一个简单的问题:钩子记录结果保存的问题;请各为高手相助!!!
- 这个星期都没有怎么好好做事,明明知道项目就要开始了,而且自己也以前也没有经验可还这样不努力!很狠我自己了,所以散尽所有的可用份共
- 有哪位高人指点一下,散分了!
- 关于资源类与MFC类
- fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- regsvr32 做了什么(星星级别的进~)
- windows使用了intel特权级的0和3级,1和2级从来不用么?
dlg1 *d1 = new dlg1;
d1->Create(IDD_DIALOG1,NULL);
改:
h 中:
dlg1 *m_pd1;
构造函数中:
m_pd1=0;
//
OnBnClickedButton1()if(m_pd1 == 0)
{
m_pd1 = new dlg1;
d1->Create(IDD_DIALOG1,NULL);
}
Class CMdlgDlg
{
dlg1 *d1;
}//CPP
CMdlgDlg::CMdlgDlg()
{
d1 = NULL;
}void CMdlgDlg::OnBnClickedButton1()
{
if( d1 )
{
d1->DestroyWindow();
delete d1;
d1 = NULL;
}
else
{
d1 = new dlg1;
d1->Create(...);
}
}
怎么能在自己的体内删除自己呢?
你这个对话框应该是在父窗口的类里建一个指针
然后动态创建对话框
当父窗口销毁时,对这个对话框的指针执行delete
这样逻辑才通的吗