码迷,mamicode.com
首页 > 其他好文 > 详细

模态与非模态对话框

时间:2019-02-04 16:46:59      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:报错   部分   图片   实现   nullptr   方法   oid   新建   dia   

模态与非模态对话框使用

模态对话框

模态对话框代码

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

模态与非模态对话框

标签:报错   部分   图片   实现   nullptr   方法   oid   新建   dia   

原文地址:https://www.cnblogs.com/17bdw/p/10351830.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!