MFC基于对话框-常用控件及其使用

对话框

模态对话框

模态对话框:当从上一级对话框弹出这个模态对话框过后,之后只能在这个对话框进行操作,其它对话框操作(包括鼠标点击等)不了

如何弹出一个模态对话框?

  1. 在资源文件的.rc2文件下的Dialog文件夹处右键单击,选择插入Dialog
    在这里插入图片描述
    我们将新插入的对话框的ID改为IDD_DIALOG_EXEC

  2. 给新插入的对话框添加一个类,右键单击,选择新建类
    在这里插入图片描述

将添加的类命名为DlgEXEC,其余默认,点击确定
3. 给初始对话框从工具箱里添加两个按钮,命名为“模态对话框”和“非模态对话框”,我们的目的是,单击按钮会弹出一个对应类型的对话框
在这里插入图片描述

  1. 右键单击第一个按钮,选择“添加事件处理程序”;消息类型选择“BN_CLICKED”(意为鼠标单击),函数名改为“OnBnClickedButton1”,点击确定,则会出现与该按钮绑定的一个函数。(整个步骤可以通过双击“模态对话框”按钮实现)
    在这里插入图片描述
  2. 在该cpp文件顶部包含“DlgEXEC.h”,在OnBnClickedButton1()函数里新建一个DlgEXEC的变量dlg , 使用函数dlg.DoModal().
    在这里插入图片描述
    6.函数写好后,f5编译并运行,点击“模态对话框”,弹出一个模态对话框,并且操作不了上一个对话框。
    在这里插入图片描述

非模态对话框

非模态对话框:当从上一级对话框弹出这个非模态对话框过后,之后可以在这个对话框进行操作,也可以在其它对话框进行操作

如何弹出一个非模态对话框?(该案例和模态对话框的案例同时进行)

  1. 插入一个Dialog,ID命名为IDD_DIALOG_SHOW;

  2. 给该对话框新建类,类名为DlgSHOW;

  3. 给按钮“非模态对话框”添加一个事项处理程序
    在这里插入图片描述

  4. 由于其中的Dlg是个局部变量,函数调用完就会被释放,故编译运行时,该非模态对话框会一闪而过;(由于模态对话框会有阻塞机制,不会一闪而过,二回继续等待消息);所以我们把类型为DlgSHOW的Dlg创建在CMFCApplicationDLGDlg类里面。
    在这里插入图片描述

  5. 编译运行,弹出了一个非模态对话框,并未一闪而过;但我们再次点击“非模态对话框”时,程序崩溃了。原因是.Creat()函数只能调用一次,运行多次会崩溃,故我们把这个函数移到OnBnClickedButton2()的外面,放进BOOL CMFCApplicationDLGDlg::OnInitDialog()这个函数里面,让主对话框初始化的时候就调用Dlg.Creat(IDD_DIALOG_SHOW);至此,OnBnClickedButton2()里就留一个Dlg.ShowWindow(SW_NORMAL);
    构造函数
    在这里插入图片描述

  6. 编译运行,点击“非模态对话框”按钮,弹出了非模态对话框,且“非模态对话框”按钮可以重复点击。

编辑框

待更新…

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值