模态与非模态对话框

Posted 17bdw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模态与非模态对话框相关的知识,希望对你有一定的参考价值。

模态与非模态对话框使用

模态对话框

模态对话框代码

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);
}

以上是关于模态与非模态对话框的主要内容,如果未能解决你的问题,请参考以下文章

MFC 创建模态与非模态对话框

模态与非模态对话框

MFC 模态对话框与非模态对话框

骆驼命名法和模态对话框与非模态的对话框

模态对话框与非模态窗口

模态与非模态