zoukankan      html  css  js  c++  java
  • VC/MFC非模态对话框实例

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

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

  • 相关阅读:
    AxAssist安装说明
    回调方法
    Export to Excel/Word COMInterface
    Using Timer
    转英文 TotalEng
    设置报表的 条形码 Barcode 字体 生产参数
    Silverlight5.0新特性一览
    Silverlight地理地质信息系统
    微软台湾发布Silverlight的卡通形象MM——藍澤光
    微软Silverlight4与Adobe Flex4打成平手,SL与FLEX技术全面对比
  • 原文地址:https://www.cnblogs.com/croot/p/3235120.html
Copyright © 2011-2022 走看看