我用的是VS2017版
模态:弹出后该程序的其它窗口就呈不可用的状态,原来程序暂停执行,直到这个模态窗口关闭后才回到原来程序继续。
非模态: 直接显示出来,原来的程序继续执行下面的语句,其它窗口也呈可用状态。
一、新建MFC(基于对话框模式)
二、按图所示完成主对话框布局(Alt+Ctrl+X调出工具箱)
用户和操作框是【Group Box】 (组成框)
其他的是【Button】 (按钮)
修改名称在属性的caption中直接修改
三、为对话框各个属性设置ID
IDC_BUTTON1
IDC_BUTTON2
IDC_BUTTON_FILEDIALOG ///文件对话框
IDC_BUTTON_FONTDIALOG ///字体对话框
IDC_BUTTON_COLORDIALOG ///颜色对话框
四、添加两个新的对话框
请输入用户名:【Static Text】(静态文本)
示例编辑框:【Edit Control】 (编辑控件)并把属性read only 改为 false
把示例编辑框属性read only 改为 false
五、单击选中IDD_DIALOG1,双击对话框空白部分
为IDD_DIALOG1添加CInputDlg类,相同的,为IDD_DIALOG2添加CShowDlg类
在两个类中在=#pragma once后添加如下代码 #include "Resource.h"
CInputDlg类添加如图所示
对新建的两个对话框,添加变量【变量类型】为CString,【变量名】为m_Username,且要选Value类别
在主对话框类COOPEx1Dlg.h 中添加成员变量
CShowDlg * m_pSDlg
CInputDlg * m_pIDlg
CString username;
并在COOPEx1Dlg.h中添加头文件引用
#include "InputDlg.h"
#include "ShowDlg.h"
六、选择模态按钮,修改函数内容
void CDialogExDlg::OnButton1()
{
// TODO: Add your control notification handler code here
m_pIDlg = new CInputDlg;
if(m_pIDlg->DoModal())
{
username= m_pIDlg->m_Username;
}
}
非模态
void Cmfc1Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
m_pSDlg = new CShowDlg;
m_pSDlg->m_Username = username;
m_pSDlg->Create(IDD_DIALOG2); //创建一个非模态对话框
m_pSDlg->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框
}
七、文件对话框添加
CFileDialog
fileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,NULL,NULL);
fileDlg.DoModal();
字体对话框添加
CFontDialog
fontDlg(NULL,CF_EFFECTS|CF_SCREENFONTS,NULL,NULL);
fontDlg.DoModal();
颜色对话框添加
CColorDialog colorDlg(0,0,NULL);
colorDlg.DoModal();
哈哈哈大功告成,运行一波美滋滋,不过MFC的代码真的可读性贼差特晕。
持续更新中~~~~