版權聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許歡迎亂轉載,標好作者+原文地址就可以了!感謝欣賞!覺得好請回個貼!
上次《【mfc】用對話框分頁實現(xiàn)用戶登錄》(
點擊打開鏈接)是一個實現(xiàn)對話框分頁登錄的Win32程序,與mfc一點關系都沒有,雖然Win32程序是mfc程序的基礎,但是在mfc中怎么能夠實現(xiàn)對話框的切換呢?同時,這個程序實現(xiàn)重新登錄,能夠靈活在不同對話框中實現(xiàn)切換。
一、基本目標
1、本程序點退出能夠成功退出,這是當然的
2、用戶在用戶名輸入admin密碼輸入123才能夠正常登錄,否則彈出對話框的提示
3、登錄之后,點擊重新登錄按鈕能夠回到登錄框,而且,這個登錄框的功能如常,點擊“登錄”先判斷用戶名與密碼有沒有輸入出錯再登錄,點擊“退出”再退出整個程序
二、制作過程
1、在MFC新建一個如下的對話框,并設置成如下的布局,而且焦點按順序擺放,也就是對話框默認選項是輸入用戶名,而不是登錄按鈕。把原來自帶的取消按鈕改為退出,把原來自帶的確認按鈕改成登錄。同時把標題改成“用戶登錄”。密碼的編輯框樣式是“密碼”。這一部分具體怎么操作,在《【mfc】用對話框分頁實現(xiàn)用戶登錄》(
點擊打開鏈接)已經(jīng)討論過,不再贅述,過程是完全與Win32程序的制作一模一樣。
2、按Ctrl+W或者點擊“查看”->“新建類向導”,為這個對話框建立一個類,新建類向導一開始會彈出一個對話框,點擊OK之后彈出如下的界面:
在Name輸入一欄輸入好本對話框的名稱,比如上圖的CLoginDlg,一般以CxxDlg作為一個對話框的名字,而且xx中首字母要大寫,以后在程序要使用到這個對話框,則使用CLoginDlg做類聲明。因此,為了你的程序做得復雜的時候,還能夠無須通過注釋,意識到是這個對話框,請不好把這個對話框命名成a之類。
3、為登錄對話框新建了類之后,在左邊的FileView視圖能夠在SourceFiles下面多出了LoginDlg.cpp,而且在HeaderFiles下面多出了LoginDlg.h兩個文件,以后如果要使用到登錄對話框,除了使用CLoginDlg做類聲明,還要在相應的文件處引用#include "LoginDlg.h",否則報錯,因為CLoginDlg就在LoginDlg.h里面
4、之后切換回ResourceView中的登錄對話框,雙擊登錄按鈕,為登錄按鈕新增類映射函數(shù),具體怎么操作,在《【mfc】學生信息管理,實現(xiàn)List控件節(jié)點的增刪改查》(
點擊打開鏈接)中已經(jīng)提過。
對于登錄按鈕,函數(shù)void CLoingDlg::OnOK()如下:
[cpp]
view plain copyprint?void CLoginDlg::OnOK()
{
// TODO: Add extra validation here
CString sid,spwd;
GetDlgItemText(IDC_EDIT1,sid);
GetDlgItemText(IDC_EDIT2,spwd);
if(sid=="admin"&&spwd=="123")
//關閉這個對話框,并且向DoModal()返回IDOK
CDialog::OnOK();
else
AfxMessageBox("用戶名或者密碼錯誤!");
}
先取出兩個對話框的值進行判斷。如果符合條件則關閉這個對話框,并向其他文件的中CLoginDlg的DoModal()方法送出IDOK的返回值
5、取消按鈕由于是自帶的退出按鈕改過來的,因此無需任何操作。之后進入到主對話框的編輯,對于主對話框的操作,不要這么快就刪除里面的所有對象,對于里面的確定與取消按鈕,我們要先給它添加消息映射函數(shù),以防用戶用鍵盤上的Esc或者點擊這個對話框的任何一部分就關閉這個對話框。同時,本對話框的關閉按鈕也要刪去,關閉按鈕的控制在對話框的樣式里面的“系統(tǒng)菜單”。
6、一開始雙擊自帶的“確定”或者“取消”按鈕的任意一個,可能會彈出類向導,這時,在彈出的類向導中點擊Cancel,再雙擊這兩個按鈕則可以為它們新建消息映射函數(shù),實質上也不是說新建,主要是改寫:
默認這兩個函數(shù)是有CDialog::OnCancel();與CDialog::OnOK();兩個函數(shù)的,如果你不為它們添加相應的消息映射函數(shù),也就是改寫他們的消息映射函數(shù)的話,它們的默認消息函數(shù)也就如此,用戶可以用鍵盤上的Esc或者點擊這個對話框的任何一部分就關閉這個對話框。把這兩行注釋掉或者刪去重新回到ResoureView下面布局如下,刪去這自帶的所有東西,把這個對話框的標題改成“控制面板”,拉出四按鈕,這里主要實現(xiàn)的是“重新登錄”與“退出”,其它的功能今后開文章再講,至于怎么拉,實在是太基礎了,不會可以看我之前的《【mfc】基本對話框程序——加法器》(
點擊打開鏈接):
7、這個對話框就是一開始新建項目就有的主對話框,因此無需為此添加類向導,默認就有兩個類,在ClassView試圖就能夠發(fā)現(xiàn)了。雙擊“退出”按鈕,為其添加如下函數(shù):
[cpp]
view plain copyprint?void CIsysDlg::OnButton4()
{
// TODO: Add your control notification handler code here
//就是一個退出,不用任何的值
EndDialog(-1);
}
切記這里必須用EndDialog(-1)來結束程序,而不是CDialog::OnCancel();因為這樣才能夠徹底銷毀程序,使用CDialog::OnCancel();有可能對話框不見了,但整個程序依舊留在線程列表中,也就是還沒有退出。
8、重新登錄按鈕的消息映射函數(shù)如下:
[cpp]
view plain copyprint?#include "LoginDlg.h"
void CIsysDlg::OnButton1()
{
//先把本對話框隱藏
ShowWindow(SW_HIDE);
//再彈出登錄對話框
CLoginDlg dlg;
//最后重新顯示本對話框,如果沒有登錄成功,用戶點了“取消”,那么由于登錄對話框返回IDCANCEL,EndDialog(-1);能夠退出整個程序
if(IDCANCEL==dlg.DoModal())
EndDialog(-1);
else
ShowWindow(SW_SHOW);
}
正如上面所說由于使用到那個登錄對話框,因此,必須要用CLoginDlg聲明一個所謂是這個對話框的“句柄”,并且引入這個對話框的頭文件,才能徹底操作這個對話框,如下面的dlg.DoModal()操作。其余的操作你不寫是那個對話框,就默認是本對話框。
至此,整個程序做完!