MFC学习(一)模态与非模态

mac2025-12-24  7

我用的是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的代码真的可读性贼差特晕。

持续更新中~~~~

最新回复(0)