【问题标题】:closing a dialog and opening another one关闭一个对话框并打开另一个
【发布时间】:2015-12-27 19:41:16
【问题描述】:

我正在创建一个登录应用程序。验证用户后,我需要关闭要求身份验证的对话框并打开另一个对话框。我使用资源编辑器创建了另一个对话框 MainMenu,并使用向导向其中添加类。我编写的这段代码打开了主菜单对话框,但它在登录表单中打开。我需要关闭登录表单并打开主菜单表单。

void CMFCApplication1Dlg::OnBnClickedButtonLogin()
{
// TODO: Add your control notification handler code here
CString username, password, user("user"), pass("pass");
c_MainMenu *c1 = new c_MainMenu;
GetDlgItemText(IDC_EDIT_UserName, username);
GetDlgItemText(IDC_EDIT_Password, password);
if (username == user && password == pass){
//  this->ShowWindow(SW_HIDE);
    c1->Create(IDD_MainMenu);
    c1->ShowWindow(SW_SHOW);
}
}

【问题讨论】:

    标签: c++ visual-studio visual-c++ mfc


    【解决方案1】:

    我假设CMFCApplication1Dlg 是模态的,如果是,则使用EndDialog(IDOK)。否则,如果它是无模式的,则调用DestroyWindow();,如果您没有以某种特殊方式管理指向对话框的指针,则删除PostNcDestroy 中指向它的指针以防止泄漏。

    现在,如何开始您的c_MainMenu 对话框。如果CMFCApplication1Dlg是模态的,那么如果登录成功调用EndDialog(IDOK)关闭它,否则调用EndDialog(IDCANCEL)。在您打开此对话框的代码中,检查来自 dlg.DoModal() 的返回值,如果是 IDOK,则打开您的 CMFCApplication1Dlg

    如果你所有的对话框都是模态的,实际上会容易得多,即:

    CMFCApplication1Dlg dlg(IDD_LOGIN);
    if (dlg.DoModal() == IDOK) {
        c_MainMenu dlg2(IDD_APP);
        dlg2.DoModal();
    }
    

    【讨论】:

      【解决方案2】:

      从您的应用程序中打开登录对话框可能会更好。

      比如InitInstance()里面:

      SetRegistryKey(_T("Local AppWizard-Generated Applications"));
      
      AfxMessageBox("Test"); // ==> open your login dialog here.
      
      // If bad login -> exit application.
      
      // Start main app
      Cdlg_testDlg dlg;
      m_pMainWnd = &dlg;
      INT_PTR nResponse = dlg.DoModal();
      

      【讨论】:

        猜你喜欢
        • 2018-07-20
        • 2015-12-30
        • 2016-06-03
        • 2012-11-10
        • 1970-01-01
        • 1970-01-01
        • 2015-12-14
        • 2020-11-23
        • 1970-01-01
        相关资源
        最近更新 更多