鸡啄米:模态、非模态对话框

来源:互联网 发布:无极郭敬明知乎 编辑:程序博客网 时间:2024/06/09 16:04

这里写图片描述

模态对话框:(1)找到视图,添加一个“对话框”资源作为模态对话框(即:插入 Dialog(E));(2)再给该模态对话框资源在添加类,类名为CTipDlg。        右键新加入的对话框,添加类,输入类名CTipDlg再点击确定。(3)再将模态对话框的头文件#include"CTipDlg.h"添加到当前项目“项目名Dlg.Cpp” 中去。注:添加头文件的位置应该在原本头文件的下面。---------------------------------------------------------------------------------------------(4)双击“打开模态对话框”按钮,进入事件处理函数,添加下面的代码,用来调用模态对话框。    INT_PTR nRes;             // 用于保存DoModal函数的返回值         CTipDlg tipDlg;  //定义一个模态对话框的对象    nRes = tipDlg.DoModal();  // 弹出该模态对话框       if (IDCANCEL == nRes)     // 判断对话框退出后返回值是否为IDCANCEL        return;  (5)给模态对话框中添加控件以及代码

========================================================================================

非模态对话框:(1)必须声明一个指向CTipDlg类的指针变量(2)需要显示的调用ShowWindow()才能将对话框显示出来。步 骤1、添加一个“对话框”资源作为非模态对话框;    再给该对话框资源在添加类,类名为CTipDlg ;2、处理____Dlg.h头文件:①在____Dlg.h中加上#include"TipDlg.h" (注:此处和模态对话框不同)②在____Dlg.h中为____Dlg类添加private成员变量    即:        CTipDlg  *m_pTipDlg;③在____Dlg类的构造函数中初始化成员变量m_pTipDlg。    即: 在构造函数体中添加m_pTipDlg = NULL;3、双击按钮,添加按键处理事件,代码如下:    if (NULL == m_pTipDlg)// 如果指针变量m_pTipDlg的值为NULL,则对话框还未创建,需要动态创建          {           // 创建非模态对话框实例           m_pTipDlg = new CTipDlg();   //【注】 此处new,必须在析构函数中delete释放        m_pTipDlg->Create(IDD_TIP_DIALOG, this); //注:IDD_TIP_DIALOG应改成对话框二的ID    }       m_pTipDlg->ShowWindow(SW_SHOW); // 显示非模态对话框    4、定义析构函数进行手动删除new出来的非模态对话框。①先在_____Dlg.h文件中为C____Dlg添加析构函数声明:    ~C_____Dlg();  ②然后在_____Dlg.cpp文件中添加析构函数的实现,函数体如下:注:此处的下划线填写工程的名称(而不是非模态对话框类的名称)!C____Dlg::~C_____Dlg()   {       // 如果非模态对话框已经创建则删除它       if (NULL != m_pTipDlg)       {           // 删除非模态对话框对象           delete m_pTipDlg;       }   }  执行结果图:

这里写图片描述

有两种创建方法:(1)    采用局部变量创建一个非模态对话框  双击按钮,添加下面的代码         CTestDialog *pTD = new CTestDialog();         pTD->Create(IDD_DIALOG1); //创建一个非模态对话框         pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框       因为指针在声明的时候是被放在堆栈中,只有整个应用程序关闭后才会被销毁,所以可以正常显示对话框。        这种方法虽然不影响程序的运行,可是指针pTD所指向的内存却导致不可用,这样的编程很不好。(2)采用成员变量创建一个非模态对话框        首先在你所要编写的类的头文件中声明一个指针变量:private:    CTestDialog *pTD;然后再在相应的CPP文件,在你要创建对话框的位置添加如下代码:双击按钮,添加下面的代码         pTD = new CTestDialog(); //给指针分配内存         pTD->Create(IDD_DIALOG1); //创建一个非模态对话框         pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框    最后在所在类的析构函数中收回pTD所指向的内存:       delete   pTD;
模态对话框嵌套的总思路:    先插入一个新的对话框    为该对话框修改ID后,添加类    此时就可以在对话框上创建控件和消息处理函数了
原创粉丝点击