VC MFC中关于非模态对话框的操作


最近遇到一个问题,就是用对话框编程,对话框中有一个按钮,点击后会弹出一个非模态的对话框,但是这个对话框是每单击一次就会弹出一个,有时候会不小心点上好几个,怎么能只弹出一个对话框呢?

先对要使用的类进行说明:

CMainDlg   主界面对话框

CChildDlg 子对话框(就是非模态弹出的对话框)


1.在CMainDlg.h中增加#include<ChildDlg.h>

2.在Public:下增加CChildDlg *m_pChildDlg;   

3.在CMainDlg.cpp中初始化m_pChildDlg = NULL;

4.在主对话框按钮的单击事件中增加下面的代码



	if(m_pChildDlg )
		m_pChildDlg ->SetActiveWindow();
	else
	{
		m_pChildDlg = new CAGCCfg();
		m_pChildDlg ->Create(IDD_AGC_CFG,this);      
		m_pChildDlg ->ShowWindow(SW_SHOW);
		m_pChildDlg ->CenterWindow();
	}


5.在CChildDlg中增加

void CChildDlg ::PostNcDestroy()
{
	delete this;
	CDialog::PostNcDestroy();
}
void CChildDlg ::OnBnClickedCancel()
{
	DestroyWindow();
}

写完上面的代码就可以让非模态对话框只能打开一个,但是还有一个问题,就是当这个非模态对话框关闭后,再打开的时候却发现打不开了,是什么原因呢?


调试一下就会发现,当子对话框关闭后,m_pChildDlg这个指针还没有赋空值

所以还要在修改第5步中的代码

void CAGCCfg::OnBnClickedCancel()
{
((CMainDlg *)GetParent())->m_pChildDlg= NULL;
DestroyWindow();
}

按照上面的步骤完成就可以实现只打开一个非模态对话框啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值