mfc怎么样可以使后打开的对话框对之前的对话框没有影响

 我来答
巧阳平Sv
2013-11-14 · TA获得超过139个赞
知道答主
回答量:168
采纳率:50%
帮助的人:105万
展开全部
voidCModelessDlg::OnOK(){UpdateData();DestroyWindow();}voidCModelessDlg::OnCancel(){UpdateData(FALSE);DestroyWindow();}在CVCDlg中添加一个数据成员CModelessDlg*m_MDlg;在CVCDlg的构造子中调用m_MDlg=newCModelessDlg(this)以构造非模态对话框对象;CVCDlg::CVCDlg(CWnd*pParent):CDialog(CVCDlg::IDD,pParent){m_hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME);m_MDlg=newCModelessDlg(this);}在CVCDlg的析构子中调用deletem_MDlg以析构非模态对话框对象;CVCDlg::~CVCDlg(){if(m_MDlg!=NULL)deletem_MDlg;}在应用程序对话框模板中增加一个按钮并映射其点击消息至OnOpenDlg(),并在OnOpenDlg()中调用m_MDlg-Create()来创建并显示非模态对话框,将m_MDlg与显示的非模态窗口绑定;voidCVCDlg::OnOpenDlg(){if(m_MDlg-GetSafeHwnd()==NULL)m_MDlg-Create();elsem_MDlg-SetWindowPos(&wndTopMost,300,400,NULL,NULL,SWP_NOSIZE);}在OnOK()中调用if(m_MDlg-GetSafeHwnd()!=NULL)m_MDlg-OnOK()以实现可能已经打开的非模态对话框的数据交换。注意要进行这样的调用必须将CModelessDlg中OnOK()设置为public型,并且此时m_MDlg可能非NULL,但其可能已未与任何窗口绑定,故不能用m_MDlg!=NULL来作为测试条件。在OnCancel()中同样处理。voidCVCDlg::OnOK(){//此时m_MDlg可能非NULL,但其可能已未与任何窗口绑定,故不能用m_MDlg!=NULL来作为测试条件,下同if(m_MDlg-GetSafeHwnd()!=NULL)m_MDlg-OnOK();//要进行这样的调用必须将CModelessDlg中OnOK()设置为public型CDialog::OnOK();}voidCVCDlg::OnCancel(){if(m_MDlg-GetSafeHwnd()!=NULL)m_MDlg-OnCancel();//要进行这样的调用必须将CModelessDlg中OnCancel()设置为public型CDialog::OnCancel();}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式