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

C++ 关闭一个对话框并打开另一个对话框,c++,visual-studio,visual-c++,mfc,C++,Visual Studio,Visual C++,Mfc,我正在创建一个登录应用程序。验证用户后,我需要关闭请求验证的对话框,然后打开另一个对话框。我使用资源编辑器创建了另一个对话框主菜单,并使用向导将类添加到其中。我编写的这段代码打开了主菜单对话框,但它是在登录表单中打开的。我需要关闭登录表单并打开主菜单表单 void CMFCApplication1Dlg::OnBnClickedButtonLogin() { // TODO: Add your control notification handler code here CString user

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

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

最好从应用程序中打开登录对话框

例如,在
InitInstance()内部


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

现在,如何启动
c_主菜单
对话框。如果
CMFCApplication1Dlg
是模态,那么如果登录成功,则调用
EndDialog(IDOK)
关闭它,否则调用
EndDialog(IDCANCEL)
。在打开此对话框的代码中,检查
dlg.DoModal()
的返回值,并打开
CMFCApplication1Dlg
,如果它是
IDOK

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

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