博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC/MFC非模态对话框实例
阅读量:4879 次
发布时间:2019-06-11

本文共 2082 字,大约阅读时间需要 6 分钟。

以下实例是基于对话框的工程,实现两个按钮分别控制两个非模态对话框,且保证每个非模态对话框只存在一个实例。

1、新建一个基于对话框(Dialog Based)工程,名称为Demo

2、在主窗口上添加2个按钮并设置其属性

    Button1的ID:IDC_Btn1          caption:按钮一

    Button2的ID:IDC_Btn2          caption:按钮二

3、再添加2个对话框,分别修改它们的ID和Caption属性

    IDD_DIALOG1的ID:IDD_Dlg1             Caption:窗口一

    IDD_DIALOG2的ID:IDD_Dlg2             Caption:窗口二   

4、为新建的2个对话框新建类,类名分别为CDlg1、CDlg2

5、在DemoDlg.h头文件中定义非模态对话框指针,定义为公共类型

public:      CDemoDlg(CWnd* pParent = NULL); // standard constructor      CDlg1 *pdlg1; //定义非模态对话框指针      CDlg2 *pdlg2; //定义非模态对话框指针

 

    记得在顶部添加头文件

    #include "Dlg1.h"

    #include "Dlg2.h"

6、打开DemoDlg.cpp文件找到 BOOL CDemoDlg::OnInitDialog()对话框初始化并在其后面初始化刚定义的非模态对话框指针,代码如下:   

SetIcon(m_hIcon, TRUE);   // Set big icon     SetIcon(m_hIcon, FALSE);  // Set small icon      // TODO: Add extra initialization here     pdlg1=NULL;//指针初始化     pdlg2=NULL;//指针初始化     return TRUE;  // return TRUE  unless you set the focus to a control

 

7、双击主界面上的“按钮一”写事件代码

void CDemoDlg::OnBtn1(){  // TODO: Add your control notification handler code here  if(pdlg1==NULL)  {    pdlg1=new CDlg1;  //实例化非模态对话框指针    pdlg1->Create(IDD_Dlg1,GetDesktopWindow());//把GetDesktopWindow() 改成this创建的对话框就不在任务栏中显示了  }  else  {    pdlg1->BringWindowToTop(); //对话框置前  }  pdlg1->ShowWindow(SW_SHOW); //显示非模态对话框  pdlg1->UpdateWindow(); //更新非模态对话框中的各个控件}void CDemoDlg::OnBtn2(){  // TODO: Add your control notification handler code here  if(pdlg2==NULL)  {    pdlg2=new CDlg2;  //实例化非模态对话框指针    pdlg2->Create(IDD_Dlg2,GetDesktopWindow());//把GetDesktopWindow() 改成this创建的对话框就不在任务栏中显示了  }  else  {    pdlg2->BringWindowToTop(); //对话框置前  }  pdlg2->ShowWindow(SW_SHOW); //显示非模态对话框  pdlg2->UpdateWindow(); //更新非模态对话框中的各个控件}

 

    以上是“按钮一”、“按钮二”的代码。当关闭主窗口时还要释放非模态对话框所占的资源,现在为主窗口添加WM_ON_CLOSE消息,编写如下的代码释放所占的的资源:

void CDemoDlg::OnClose(){   // TODO: Add your message handler code here and/or call default   if(pdlg1 !=NULL) delete pdlg1; //释放非模态对话框所占资源   if(pdlg2 !=NULL) delete pdlg2; //释放非模态对话框所占资源   CDialog::OnClose();}

 

    要记得在DemoDlg.cpp上面添加头文件

    #include "Dlg1.h"

    #include "Dlg2.h"

8、现在运行即可实现非模态对话框效果了:在点击显示对话框时,如果对话框未创建,则创建该对话框,否则将已创建的对话框显示出来。

转载于:https://www.cnblogs.com/croot/archive/2013/02/01/3235120.html

你可能感兴趣的文章
温故而知新练习3
查看>>
【转】iOS应用崩溃日志分析
查看>>
EtherCAT Slave 入门教程 - 邮箱服务(1)
查看>>
java基础------抽象类
查看>>
【poj3537】 Crosses ans Crosses
查看>>
【poj1013】 Counterfeit Dollar
查看>>
Centos7 安装配置Apache+Mysql5.7+PHP7.0+phpmyadmin
查看>>
最佳调度问题
查看>>
10.04 FZSZ模拟Day1 总结
查看>>
RabbitMQ学习以及与Spring的集成(二)
查看>>
PHP 扩展开发小结
查看>>
Go语言数据类型
查看>>
textarea在ie中focus不起作用
查看>>
User Get 'Access Denied' with Excel Service WebPart
查看>>
C# 读取WAV文件(详细)
查看>>
Sqoop2搭建及使用
查看>>
Git闪退问题
查看>>
Linux命令
查看>>
Android UI线程和非UI线程
查看>>
SpringBoot定时任务
查看>>