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

时间:2015-12-27 19:41:17

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

我正在创建一个登录应用程序。当用户被验证时,我需要关闭要求进行身份验证的对话框并打开另一个对话框。我使用资源编辑器创建了另一个对话框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);
}
}

2 个答案:

答案 0 :(得分:0)

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

例如,在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();

答案 1 :(得分:0)

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

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

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

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