- 在Dialog子项中
插入Dialog
, - 点击对话框属性,更ID,命名为
IDD_EXEC
和IDD_NONEXEC
- 编辑对话框
- 给对话框生成类:右键+
添加类
- 给主对话框的button创建事件处理
方法1: 双击button,自动生成函数
方法2: 属性——控件事件
方法3: 属性——添加事件处理程序
- 编写模态对话框代码
双击button跳转到按钮的函数体。
先引入模态对话框的头文件CDlgExec.h
然后在函数体敲代码
void CDialogenDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//弹出模态对话框
CDlgExec dlg;
INT_PTR nRes; //用来判断是否打开
nRes = dlg.DoModal(); //DoModal 打开模态对话框
if (nRes == IDCANCEL)
return;
}
首先生成模态对话框对象,然后DoModal
成员函数打开对话框
效果图:
模态框里的变量在模态框类的DoDataExchange里修改,比如(下拉框见下拉框文章)
- 编写非模板对话框代码
双击非模态的button跳到函数体
引入非模态对话框头文件CDlgNExec.h
//编写代码1
void CDialogenDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
CDlgNExec dlg;
//创建窗口
dlg.Create(IDD_NONEXEC);
//显示窗口
dlg.ShowWindow(SW_SHOWNORMAL);
}
效果就是非模态对话框一闪而过……因为模态对话框有阻塞,而这个执行之后马上就结束函数了。
//方法:写成成员函数
在主对话框header里,创建一个private的CDlgNExec对象。
然后函数体代码:
void CDialogenDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
//CDlgNExec dlg;
//创建窗口
dlg.Create(IDD_NONEXEC);
//显示窗口
dlg.ShowWindow(SW_SHOWNORMAL);
}
效果:执行第一次阔以,执行第二次崩溃,因为Create调用了2次,而你只需要调用一次。
//方法:将Create函数写在此函数中
然后将函数体那个注释掉。