关闭一个对话框并打开另一个

Posted

技术标签:

【中文标题】关闭一个对话框并打开另一个【英文标题】: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);


【问题讨论】:

【参考方案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();

【讨论】:

以上是关于关闭一个对话框并打开另一个的主要内容,如果未能解决你的问题,请参考以下文章

我的 IE 在另一个新对话框的 EndDialog 和 DoModal 上崩溃

在 mfc 中打开另一个表单

WPF 访问打开的打印对话框并关闭它们

如何从父关闭按钮单击事件打开的子对话框中关闭父对话框?

PyQt:为啥新窗口在打开后立即关闭[重复]

关闭和加载的jQuery对话框问题