现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

创建模态对话框和非模态对话框

2012-09-05 11:07 工业·编程 ⁄ 共 898字 ⁄ 字号 暂无评论

  对话框分两类:模态(Modal)对话框和非模态(Modeless)对话框 

     1、模态对话框是实现时候无法执行其他操作,创建模态对话框的方法:

      先将对话框关联类,如:CTestDlg 。在点击的cpp文件中加入头文件#include “testdlg.h”,在点击OnClicked函数中(/*假设IDD_TESTDLG为已经定义的对话框资源的ID号*/):

void OnClicked 

        CTestDlg dlg; 
        dlg.Create(IDD_TESTDLG,this); 
        dlg.ShowWindow(SW_SHOW); 

    2、非模态对话框是实现时候可以执行其他操作,创建非模态对话框的方法:

      先将对话框关联类,如:CTestDlg 。在点击的cpp文件中加入头文件#include “testdlg.h”,不能用以上方法,因为非模态对话框dlg是个局部对象,OnClicked函数结束dlg也销毁(模态是暂停在那里的)。2解决方法(1.将对话框定义为成员变量;2.定义指针)。现用指针,在堆上分配内存(因为在堆上分配内存和程序的整个生命周期是一致的),改为:在点击OnClicked函数中:

 
void OnClicked 

        CTestDlg *pDlg = new CTestDlg; 
        pDlg->Create(IDD_TESTDLG,this); 
        pDlg->ShowWindow(SW_SHOW); 

这样就OK了,但是这样每次执行这个菜单命令都会创建一次这个非模态对话框,想要只能创建一个时,改为:

void OnClicked 

static CTestDlg *dlg = new CTestDlg;//必须静态,不然原来是dlg指针又重新分配地址 
if(!IsWindow(dlg->m_hWnd)) //如果m_hwnd存在,就不创建 

        dlg->Create(IDD_TESTDLG,this); 
        dlg->ShowWindow(SW_SHOW); 

给我留言

留言无头像?