模态与非模态对话框

模态与非模态对话框使用

模态对话框

模态对话框代码

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);
}
原文地址:https://www.cnblogs.com/17bdw/p/10351830.html