关闭一个对话框并打开另一个
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();
【讨论】:
以上是关于关闭一个对话框并打开另一个的主要内容,如果未能解决你的问题,请参考以下文章