版权声明:归所有菜鸟所有 https://blog.csdn.net/weixin_41752475/article/details/89309035
MFC的对话框编程1
MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box)。
1、 模态对话框(model dialog box)
在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送
2 、非模态对话框(modaless dialog box)
在程序运行的过程中,若出现了非模态对话框,主窗口还可以发送消息。
点击非模态对话框中的OK按钮,非模态对话框没有销毁,只是隐藏了。若想点击OK按钮时,非模态对话框也销毁,那么CTestDialog类必须重载其基类CDialog的虚函数OnOK(),在此函数里调用DestroyWindow()来销毁此对话框。
在资源试图的Dialog中选取控件Button
1、插入两个新的Dialog,右键属性改ID名.2、对新的Dialog添加类
3、在Dialog窗口的Button按键添加事件处理(三种方法都可以添加)
3.1双击控件,对于按钮这种直接双击只能创建一种事件处理
3.2对控件右击
3、在属性选择
4、进行模态非模态关联
4.1模态对话框
在原先Dlg.cpp添加模态对话框的.h文件
#include" C模态.h"
void CMFC4151Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//模态
CDlg_exec dlg;
dlg.DoModal();
//非模态
//CDlg_exec dlg;
//dlg.Create(IDD_exec);
//dlg.ShowWindow(SW_SHOWNORMAL);
}
2、非模态
1) 见上,一样。但是出现窗口一闪而过
void CMFC4151Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//模态
//CDlg_exec dlg;
//dlg.DoModal();
//非模态
CDlg_exec dlg;
dlg.Create(IDD_exec);//IDD_exec为模态或者非模态窗口ID
dlg.ShowWindow(SW_SHOWNORMAL);
}
showWindow()参数选择
2)在 主Dlg.h,添加
`#include "CDlg_exec.h"`
加上
private:
CDlg_exec dlg;
这样的非模态不闪,但是第二次点击回报错
3)在2)的基础上再改动
在 主Dlg.app的OnInitDialog()添加
// TODO: 在此添加额外的初始化代码
dlg.Create(IDD_exec);
这样在事件处理中
void CMFC4151Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//模态
//CDlg_exec dlg;
//dlg.DoModal();
//非模态
//CDlg_exec dlg;
//dlg.Create(IDD_exec);//IDD_exec为模态或者非模态窗口ID
dlg.ShowWindow(SW_SHOWNORMAL);
}