2015-12-27 208 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(),如果它是IDOK,則打開CMFCApplication1Dlg

實際上這將是一個容易得多,如果你所有的對話框都是有模式,即:

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(); 
相關問題