mfc非模态对话框的使用

    xiaoxiao2025-08-26  53

    本次使用情况,在一个view中通过点击按钮,产生非模态对话框 1.创建非模态对话框 MyView.h CMyDialog*pDlg;//在头文件声明全局指针,方便调用 MyView.cpp CMyView::CMyView(Void) { ... pDlg =NULL;//构造函数初始化 } CMyView::CreateDialog()//产生对话框 {   pDlg=new CDialogFloat;   pDlg->Create(IDD_MYDIALOG);   SHOW_DIALOGFLOAT =true;   pDlg->ShowWindow(SW_SHOW); } MyDialog.h //重载OnCancel(),PostNcDestroy()函数   virtual void OnCancel();   virtual void PostNcDestroy(); MyDialog.cpp //销毁对话框 void CMyDialog::OnCancel() {     DestroyWindow(); } void CMyDialog::PostNcDestroy() {       CDialog::PostNcDestroy();     delete this;//删除当前对象 } 这样写,最基本的创建和销毁就能实现了,但这样点击第二次就会出现重复创建,这个时候一般用pDlg!=NULL,pDlg->IsWindowVisible()判断,因为pDlg在头文件被声明,又没有经过构造函数初始化,因为view没有重新构造,所以符合pDlg!=NULL,但是没有定义,所以判断pDlg->IsWindowVisible()就会报错.我一开始认为是delete的时候没有初始化,但是因为CMyDialog并不是CMyView的子类,不能用getparent()得到pDlg最后也就不了了之,至于是不是,我也无法得知,最后我选择使用一个全局的bool变量解决问题,extern也许会拖慢程序速度,但考虑良久,还是没有想出好的办法,最后也无奈妥协,希望有好的办法的朋友能够告知一下,感激不尽.本人邮箱18352538433@163.com temporary.cpp bool SHOW_DIALOG; MyView.cpp extern bool SHOW_DIALOG; CMyView::CMyView(Void) { ... SHOW_DIALOG =false;//构造函数初始化 } CMyView::CreateDialog()//产生对话框 {    if (!SHOW_DIALOG) {    pDlg=new CDialogFloat;   pDlg->Create(IDD_MYDIALOG);   SHOW_DIALOGFLOAT =true;   pDlg->ShowWindow(SW_SHOW); } }

    void CViewUserDefIndex::SendDlgData()//调用pDlg

    {    if(SHOW_DIALOGFLOAT) 

    {   

          if(pDlg->IsWindowVisible())     

    {    pDlg->m_temp1.SetWindowText(m_text1);       

         pDlg->m_temp2.SetWindowText(m_text2);      

    }  

    }

    }

    MyDialog.cpp //销毁对话框 void CMyDialog::OnCancel() {        SHOW_DIALOGFLOAT =false;     DestroyWindow(); } void CMyDialog::PostNcDestroy() {       CDialog::PostNcDestroy();     delete this;//删除当前对象 } 这样就可以通过改变SHOW_DIALOG的值来判断pDlg是否被创建了. 用代码片出来的代码,我自己都看不懂
    转载请注明原文地址: https://ju.6miu.com/read-1302002.html
    最新回复(0)