要求用戶正確輸入用戶名和密碼,然後才能進入系統。剛好前幾天有個人問俺如何在程序啟動時先啟動登錄對話框的問題,俺就給他寫了個示例程序,今天拿出來給大伙共享,有什麼不正確的地方請大家多多指教。
一、在 LoginTest.h 文件中添加一個 public 的 布爾型變量 BOOL m_bSuccessLogin;
二、在 LoginTestView.h 文件中添加 CLoginTestApp* pApp = (CLoginTestApp*) AfxGetApp();
現在很多程序需要在登錄界面上輸入正確的用戶帳號和密碼才能繼續使用,就象 Win2000 啟動後會用來定義一個指向 LoginTest 類的指針。
三、LoginTestView.cpp 文件中添加初始化函數
void CLoginTestView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: 在此添加專用代碼和/或調用基類
p:
logindlg.m_strUserName = _T("");
logindlg.m_strUserPwd = _T("");
logindlg.DoModal();
if (strcmp(logindlg.m_strUserName,"aa") == 0 && strcmp(logindlg.m_strUserPwd,"bb") == 0)
{
//假定用戶帳號是“aa”用戶密碼是“bb”
pApp;m_bSuccessLogin = true;
}
else
{
//假定用戶沒有單擊對話框上的“取消”按鈕,則繼續顯示登錄對話框
if (!logindlg.m_bCancle)
{
AfxMessageBox(";錯誤的帳號或密碼!";);
goto p;
}
}
}
四、修改 LoginTest類中的函數BOOL CLoginTestApp::InitInstance()如下所示:
BOOL CLoginTestApp::InitInstance()
{
// 如果一個運行在 Windows XP 上的應用程序清單指定要
// 使用 ComCtl32.dll 版本 6 或更高版本來啟用可視化方式,
//則需要 InitCommonControls()。否則,將無法創建窗口。
InitCommonControls();
CWinApp::InitInstance();
// 初始化 OLE 庫
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
// 標准初始化
// 如果未使用這些功能並希望減小
// 最終可執行文件的大小,則應移除下列
// 不需要的特定初始化例程
// 更改用於存儲設置的注冊表項
// TODO: 應適當修改該字符串,
// 例如修改為公司或組織名
SetRegistryKey(_T("應用程序向導生成的本地應用程序"));
LoadStdProfileSettings(4);?// 加載標准 INI 文件選項(包括 MRU)
// 注冊應用程序的文檔模板。文檔模板
// 將用作文檔、框架窗口和視圖之間的連接
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CLoginTestDoc),
RUNTIME_CLASS(CMainFrame),?// 主 SDI 框架窗口
RUNTIME_CLASS(CLoginTestView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
// 分析標准外殼命令、DDE、打開文件操作的命令行
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// 調度在命令行中指定的命令。如果
// 用 /RegServer、/Register、/Unregserver 或 /Unregister 啟動應用程序,則返回 FALSE。
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// 唯一的一個窗口已初始化,因此顯示它並對其進行更新
if (m_bSuccessLogin)//如果用戶成功登錄
{
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd->UpdateWindow();
// 僅當存在後綴時才調用 DragAcceptFiles,
//?在 SDI 應用程序中,這應在 ProcessShellCommand?之後發生
return TRUE;
}>
else //如果沒有成功登錄
{
delete(m_pMainWnd);
m_pMainWnd = NULL;
return FALSE;
}
}
程序的運行後首先彈出登錄對話框如下:
用戶正確輸入帳號和密碼(假定分別為aa和bb),則進入系統,否則給出提示。
這是程序的主要實現部分,其它的部分就不說了,大家可以看一下源程序。該程序中VS.NET中編譯通過。
本文配套源碼