mfc怎么样可以使后打开的对话框对之前的对话框没有影响
1个回答
展开全部
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();}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询