編寫一個簡單的登錄對話框
大家好,我們利用MFC編寫一個簡單的登錄對話框。主窗體是單文檔界面。程序運行的時候,先彈出一個簡單的登錄對話框,輸入用戶名和密碼后主窗體顯示出來。
1、開打VC++6.0。點擊文件,新建,點擊工程中的MFC AppWizard(exe),在右邊選擇工程保存的位置,並且為工程取好名字。
2、點擊確定后,選擇單個文檔,你可以一直點擊下一步,直到完成,或者在這里直接點擊完成即可,完成后界面如下。
3、點擊工具欄中的“!”號試着編譯運行一次,看是否有問題。如果沒有問題,我們繼續。點擊左邊的ResourceView,在Dialog上面鼠標右鍵單擊彈出一彈出框,單擊Insert Dialog。
4、在右邊新增的對話框中,適當改變窗口大小,加入靜態文本框和文本編輯框。
5、鼠標右鍵單擊剛才加進去的第一個靜態文本框控件,點擊屬性。在彈出的標題中填寫:輸入用戶名:。然后回車
同樣在下面的第二個靜態文本框的屬性標題改為:輸入密碼:。然后回車。
6、在第一個文本編輯框上右鍵單擊,點擊屬性,把ID框中的IDC_EDIT1改為容易理解的名字,如:IDC_EDIT_NAME,注意前面的IDC_EDIT最好不要去掉,這樣容易見名而知義。同樣,對第二個文本編輯框的屬性中的IDC_EDIT2改為:IDC_EDIT_PWD
7、在對話框上的任何空白的地方右鍵單擊,點擊建立類向導。
然后彈出
選擇建立Create a new class,點擊OK。
這是為這個對話框創建一個新的類。在Name中,為該對話框類取個名字:CDlg_login。下面的Base class以及Dialog ID不要隨便改動。然后點擊OK。這樣新的類CDlg_login就與本對話框建立起了聯系。
8、點擊OK后,我們並沒有退出建立類向導。
點擊member variables。
9、左鍵雙擊IDC_EDIT_NAME(或者單擊后,點擊右邊的add variables),為IDC_EDIT_NAME增加一個對應在類中的名字:m_login_name。其他地方不要改動。
點擊OK。同樣也對IDC_EDIT_PWD也取一個名字:。
10、點擊確定。這樣我們就建立好了登錄對話框以及其對應的類CDlg_login。我們在ClassView里面可以看到我們新加入 類CDlg_login。
11、我們注意到右邊的對話框的標題欄上依然還是Dialog,我們可以在對話框空白的地方單擊右鍵,點擊屬性,在標題中輸入:請登錄。其他地方不要改動。
12、這個時候如果編譯運行的話,該對話框並不會自動彈出來。我們要讓程序開始運行的時候自動彈出登錄對話框。點擊右邊的FileView,點擊source files,雙擊MainFrm.cpp。這樣在右邊就打開了該文件。找到CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct),這是窗體框架創建函數。在該函數的后面(在return 0 ;的前面)加入語句(注意大小寫):
CDlg_login dlg;//生成一個登錄對話框對象
dlg.DoModal();//讓對話框對象以有模式形式顯示出來
這個時候編譯肯定會出錯,我們要在MainFrm.cpp文件的前面添加:#include "dlg_login.h"。編譯后錯誤消失。運行結果如下。
13、在運行過程中,點擊OK后,主窗體會顯示出來,我們並沒有在用戶名以及密碼框中輸入。下面我們要求輸入正確的用戶名和密碼,主窗體才能顯示出來。
14、點擊左邊的ResourceView,雙擊Dialog中的IDD_DIALOG1,然后雙擊右邊的OK按鈕,
要求增加一個成員函數,點擊OK即可。我們將在下面的截圖所在的void CDlg_login::OnOK()函數中進行編程。
15、在void CDlg_login::OnOK()函加入如下代碼:
void CDlg_login::OnOK()
{
// TODO: Add extra validation here
this->UpdateData(true);
if(this->m_login_name=="math" && this->m_login_pwd=="1234")
CDialog::OnOK();
else
MessageBox("登錄有誤");
}
編譯運行即可實現我們的要求了。
16、等等,我們發現輸入密碼的時候是明碼,不是星號顯示的。我們還要在登錄對話框的密碼文本編輯框的屬性中更改。在登錄對話框,右鍵點擊密碼文本框,點擊屬性,點擊style,選中password回車即可。
17、本程序還有很多弊端,比如,關閉登錄對話框也可以進行主窗體,點擊cancel也可以進入,用戶名和密碼不能更改,這要求和數據庫聯系起來。大家可以思考一下,怎么該進。全文完畢。
18、現在連接數據庫。先利用access建立數據庫,名字為book_db,並建好一個管理員表book_admin
19、為book_db建立數據源,打開控制面板,點擊管理工具,點擊打開數據源,添加系統dsn,
點擊右邊的添加,選擇Microsoft Access Driver(*.mdb),給數據源取個名字比如:book_db_dsn,
然后點擊選擇,選中剛才建立的book_db保存的位置,選中好該數據庫,點擊確定即可。
最后點擊確定完成了數據源的建立。
20、在MFC中建立ADO數據庫連接
在stdafx.h文件中添加對ado的支持:
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
//#include<icrsint.h> (可選,可不用添加此頭文件)
在CDlg_login.h頭文件中添加:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
21、連接數據源,在OnOk函數中輸入如下:
void CDlg_login::OnOK()
{
// TODO: Add extra validation here
this->UpdateData(true);
::CoInitialize(NULL);
this->m_pConnection.CreateInstance(__uuidof(Connection));
this->m_pRecordset.CreateInstance(__uuidof(Recordset));
this->m_pConnection->Open("DSN=book_db_dsn","","",0);//上面四行為打開數據源連接
CString str;
str.Format("select * from book_admin where admin_name='%s' and admin_pwd='%s'",this->m_login_name,this->m_login_pwd);
BSTR bstrSQL=str.AllocSysString();
this->m_pRecordset->Open(bstrSQL,(IDispatch*)this->m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
if(!this->m_pRecordset->adoEOF)
CDialog::OnOK();
else
MessageBox("Failed");
this->m_pRecordset->Close();
this->m_pConnection->Close();
}
至此ADO數據源連接完畢。