【MFC-10】VS2010/MFC基於對話方塊程式的登入視窗實現
阿新 • • 發佈:2019-01-01
一、開發環境
1、VS2010;
2、C++ / MFC;
二、登入視窗設計示例
1、新建基於對話方塊的MFC專案,命名為“UserLogin”;
2、資源檢視中插入一個Dialog,修改ID為:IDD_LOGIN_DIALOG,標題修改為登入對話方塊,並新增控制元件,結果如圖1所示;
圖1
3、建立登入對話方塊類:CLoginDlg,新增控制元件變數如圖2所示;
圖2
4、將對話方塊類標頭檔案新增到UserLogin.cpp;
// UserLogin.cpp : 定義應用程式的類行為。 // #include "stdafx.h" #include "UserLogin.h" #include "UserLoginDlg.h" #include "LoginDlg.h"
5、修改UserLogin.cpp函式BOOL CUserLoginApp::InitInstance()如下:
BOOL CUserLoginApp::InitInstance() { // 如果一個執行在 Windows XP 上的應用程式清單指定要 // 使用 ComCtl32.dll 版本 6 或更高版本來啟用視覺化方式, //則需要 InitCommonControlsEx()。否則,將無法建立視窗。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 將它設定為包括所有要在應用程式中使用的 // 公共控制元件類。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); AfxEnableControlContainer(); // 建立 shell 管理器,以防對話方塊包含 // 任何 shell 樹檢視控制元件或 shell 列表檢視控制元件。 CShellManager *pShellManager = new CShellManager; // 標準初始化 // 如果未使用這些功能並希望減小 // 最終可執行檔案的大小,則應移除下列 // 不需要的特定初始化例程 // 更改用於儲存設定的登錄檔項 // TODO: 應適當修改該字串, // 例如修改為公司或組織名 SetRegistryKey(_T("應用程式嚮導生成的本地應用程式")); <span style="color:#ff0000;">// 登入對話方塊,系統登入 CLoginDlg loginDlg; if(loginDlg.DoModal() == IDOK) { CUserLoginDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: 在此放置處理何時用 // “確定”來關閉對話方塊的程式碼 } else if (nResponse == IDCANCEL) { // TODO: 在此放置處理何時用 // “取消”來關閉對話方塊的程式碼 } } else { return FALSE; }</span> //CUserLoginDlg dlg; //m_pMainWnd = &dlg; //INT_PTR nResponse = dlg.DoModal(); //if (nResponse == IDOK) //{ // // TODO: 在此放置處理何時用 // // “確定”來關閉對話方塊的程式碼 //} //else if (nResponse == IDCANCEL) //{ // // TODO: 在此放置處理何時用 // // “取消”來關閉對話方塊的程式碼 //} // 刪除上面建立的 shell 管理器。 if (pShellManager != NULL) { delete pShellManager; } // 由於對話方塊已關閉,所以將返回 FALSE 以便退出應用程式, // 而不是啟動應用程式的訊息泵。 return FALSE; }
6、登入對話方塊新增“登入按鈕”訊息響應;
void CLoginDlg::OnBnClickedOk() { // TODO: 在此新增控制元件通知處理程式程式碼 this->UpdateData(true); if(this->m_UserName.IsEmpty() || this->m_UserPassword.IsEmpty()) { MessageBox(_T("使用者名稱或密碼不能為空,請重新輸入!"),_T("使用者登入資訊"),MB_ICONINFORMATION); return; } else if(this->m_UserName == "Admin" && this->m_UserPassword == "12345") { CDialogEx::OnOK(); } else { MessageBox(_T("使用者名稱或密碼不正確,請重新輸入!"),_T("登入失敗"),MB_ICONERROR); return; } }
7、生成 ---> 生成解決方案,執行即可測試。
備註:
1)輸入密碼處的編輯框修改屬性:“Password”為“True”;
2)實現登出登入:在主對話方塊中新增“登出”按鈕及其訊息響應;
void CUserLoginDlg::OnBnClickedButtonLogout()
{
// TODO: 在此新增控制元件通知處理程式程式碼
ShowWindow(SW_HIDE);
CLoginDlg loginDlg;
loginDlg.m_LoginType = 3;
if (IDOK == loginDlg.DoModal())
{
Sleep(100);
ShowWindow(SW_SHOW);
}
else
{
PostQuitMessage(0);
}
}
3)使用者名稱和密碼登入資訊可以採用資料庫形式儲存,具體可參考本人其他微博文章內容。