• 基于对话框的编程之模态与非模态


    一、效果图

     

    二、模态对话框和非模态对话框区别

    程序运行过程中,若出现了模态对话框,则主窗口无法继续发送消息,直到模态对话框关闭;若出现了模态对话框,主窗口仍可以继续发送消息。

    三、具体实现步骤

    1、新建一个MFC应用程序,命名为01 CDialog

    2、在设置应用程序类型时,选择基于对话框的,其他默认设置

    3、运行程序,初始效果如下

    4、查看类视图,我们可以看到CMy01CDialogApp和CMy01CDialogDIg两个类,其中App类继承于CWinApp,里面的InitInstance方法是程序入口,DIg类继承于CDialogEx

    5、在资源视图里面打开对话框

    在源文件夹下有一个.rc文件,双击后就能打开资源视图,在Dialog下,找到我们要做修改的对话框IDD_MY01CDIALOG_DIALOG

    6、修改对话框的标题

    按Ctrl+A键,全选,然后按Delete键删除对话框里面的初始内容

    右键属性,修改Caption属性为对话框

    7、新增按钮

    找到工具箱,找到Button,拖拽到对话框内

    右键属性,修改按钮的名字为模态对话框

    再新增一个按钮,命名为非模态对话框,效果如下:

    8、新增对话框

    找到资源视图,Dialog右键点击Insert Dialog

    对新增的对话框右键属性,修改ID为IDD_EXEC

    添加一个按钮,命名为模态弹出了

    9、将新建对话框关联到一个类

    在对话框内的空白处右键,点击Add Class..,类名命名为CDIgExec

    10、添加点击事件(三种方法)

    • 按钮处右键属性,点击Control Events(闪电图标),找到BN_CLICKED,在下拉框中选择<Add> OnBnClickedButton1

      

      

      

    • 按钮右键选择Add Event Handler..

      

      

    • 直接双击按钮(推荐使用)

    11、编辑点击事件

    //模态对话框按钮的点击事件
    void CMy01CDialogDlg::OnBnClickedButton1()
    {
        // TODO: Add your control notification handler code here
        //弹出模态对话框
        CDlgExec dlg;
        dlg.DoModal();
    }

    将头文件包含进来

    运行效果

    12、为非模态对话框添加类(CDIgShow)和点击事件

    13、在.h文件中声明非模态对话框对象

    14、将Create事件写到OnInitDialog()事件中

    15、显示非模态对话框

    //非模态对话框按钮的点击事件
    void CMy01CDialogDlg::OnBnClickedButton2()
    {
        // TODO: Add your control notification handler code here
        //非模态对话框
        //CDlgShow dlg;
        //创建
        //dlg.Create(IDD_SHOW);//创建窗口只能创建一次,多次就会崩掉
        //显示
        dlg.ShowWindow(SW_SHOWNORMAL);
    }
  • 相关阅读:
    nyoj 19擅长排列的小明 (DFS)
    POJ 1321棋盘问题
    线段树与树状数组草稿
    组合博弈入门知识汇总
    组合博弈入门(题目练习及代码解析)
    pandas 连接数据库直接查表建立dataframe。loc,sort_values数据清洗操作
    Django 项目内利用ORM直接运行脚本读库
    Pandas库中的DataFrame
    利用pandas对numpy数组进行简单的科学计算
    进程池 爬去梨视频 视频资源
  • 原文地址:https://www.cnblogs.com/yanchaoyi/p/12639276.html
Copyright © 2020-2023  润新知