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