2015-12-27 5 views
2

Я создаю приложение для входа в систему. когда пользователь проверен, мне нужно закрыть диалоговое окно с запросом на аутентификацию и открыть другое диалоговое окно. Я создал другое диалоговое окно 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

Я предполагаю, что 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(); 
} 
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(); 
Смежные вопросы