模态与非模态对话框
模态与非模态对话框使用
模态对话框
模态对话框代码
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);
}