模态与非模态对话框使用
模态对话框
模态对话框代码
CXxxDlg dlg;dlg.DoModal()==IDOK
新建对话框绑定类
1、资源窗口-【添加资源】-【Dialog】
2、绑定为【CLogin】类
3、窗口设计
绑定编辑框控件:控件账户(m_szId)、密码(m_szPwd)。
复选框控件:自动登录(m_bAutoLogin)、记住密码(m_bSavePwd)
- 4、在第一个对话框中的模态按钮添加一个事件
void CMFC04digDlg::OnBnClickedButtonLogin(){ // TODO: 在此添加控件通知处理程序代码 // 模态对话框 if (m_dlg.DoModal() == IDOK) { CString szId = m_dlg.m_szId; CString szPwd = m_dlg.m_szPwd; CString szAuto = _T("不自动登录"); CString szSavePwd = _T("不记住密码"); if (m_dlg.m_bAutoLogin) // CLogin类中的私有变量,对应一个复选框按钮变量 { szAuto = _T("自动登录"); } if (m_dlg.m_bSavePwd) { szSavePwd = _T("记住密码"); } MessageBox(szId + szPwd, szAuto + szSavePwd, MB_OK); }}
其中【CLoginDlg dlg;】如果是放在函数里就变成了局部变量,所以要在调用这个对话框的对话框中的头文件里做声明。
CLoginDlg dlg;
非模态对话框
非模态对话框代码
CXxxDlg m_showMsgDlg; m_showMsgDlg.Create(IDD_DIALOG_SHOWMSG, NULL);m_showMsgDlg.ShowWindow(SW_SHOW);
新建方法
与模态对话框新建对话框绑定类差不多
处理异常
对话框只能创建一次,第二次创建反复创建会报错。
MFC_04_digDlg.h: 头文件声明变量:
//非模态对话框CShowMsgDlg m_ShowMsgDlg;BOOL m_bCreated;
其中m_bCreated要在构造函数初始化为FALSE。
CMFC04digDlg::CMFC04digDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_MFC_04_DIG_DIALOG, pParent) , m_bCreated(FALSE) // 初始化为FALSE{ m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}
实现部分代码:
void CMFC04digDlg::OnBnClickedButtonNonmod(){ // TODO: 在此添加控件通知处理程序代码 if (!m_bCreated) { m_ShowMsgDlg.Create(IDD_DIALOG_ShowMsgDlg, NULL); m_bCreated = TRUE; } m_ShowMsgDlg.ShowWindow(SW_SHOW);}