對話方塊的實現畢竟是很簡單的。但是,自己親手寫段**實現比什麼都強,夥計,你說呢?特別對於新手來說,哦,好處太多了。同時,等你寫完了,看看程式的執行,彈出自己的對話方塊,什麼感覺,動手試一試吧,來吧。夥計!我說的沒錯。(注:本系列博文**都在
visual studio 2008
中執行通過!)。
首先建立乙個基於對話方塊的
mfc程式。建立過程就免了,因為那樣卻時很浪費時間來截每一張圖,哦,太費勁了,為我想想吧!如果不會,
call me
!我給我的程式起了個好聽的名字,
mfc_dialog
聽起來不錯,哦,對了,夥計,不要忘了,選擇基於對話方塊的應用程式,否則,你是做不出來的。呵呵!其它的就不要管了。要是你懂那就更好了。
我會把**和最終的執行結果貼出來,大家照著做就
ok了!
講解一下,本程式使用到的一些系統函式:
1lpctstr lptext:int messagebox(
hwnd hwnd
,
,lpctstr lpcaption
,uint utype);2
:int afxmessagebox(
lpctstr lpsztext,
uint ntype = mb_ok,
uint nidhelp = 0
);int
afxapi afxmessagebox(
uint nidprompt,
uint ntype = mb_ok,
uint nidhelp = (uint) -1
);可以看到
afxmessagebox
有兩種形式。3:
void
afxformatstring2(
cstring& rstring,
uint nids,
lpctstr lpsz1,
lpctstr lpsz2
);看到函式名了嗎?是
afxformatstring2
,有了2
,那就可定有
1,那就順便把
afxformatstring1
頁說了吧。
void afxformatstring1(
cstring& rstring,
uint nids,
lpctstr lpsz1
);現在把這幾個函式在程式中如何使用,還有mfc程式是如何執行進行講解一下。
要了解mfc程式,就算你讀mfc程式,最起碼的是,你要知道從**開始讀,對吧?你讀**的順序就是
mfc的執行機順序。很多人不知道這個順序,那就肯定不能寫出好的
mfc程式,你應該和我共鳴的。夥計,你認為呢?
首先,這個是乙個基於對話方塊的很簡單程式,沒有牽扯到
mfc那麼重要的
document/view
機制。就是怕,開始的藥要是太猛了,怕傷了你們。
我的程式名稱是
mfc_dialog
,不錯,很是朗朗上口。你會在
mfc_dialog.cpp
中發現這麼個全域性變數。
// 唯一的乙個
物件是這麼定義的。哦,對了,程式就是從這裡開始執行的。你知道定義了乙個
cmfc_dialog
cmfc_dialog
這個類的父類是誰?那肯定是
了。對吧。你看看你的**,就知道我的對錯了。如果在
visual studio 2008
下你會覺得我說的是錯的,呵呵,應為你會發現它的父類是
,哦,是的,但是我沒有錯,你在看看
的父類是誰,你會發現是
,那麼**來的呢?看看
ex,你該知道是什麼意思了吧!這說明
是類的擴充套件,就是說微軟在原來的基礎上加入了新的東西。現在該明白了吧。
現在接著說mfc程式的執行過程。開始了征程,這個全域性變數,就開始了這些父類的建構函式了。這個是c++的性質,你該懂得。
這個執行過程,我不會講的像《深入淺出mfc》那麼詳細,因為我也沒有那麼多時間。呵呵!接著來,經過很漫長的執行,終於到了
函式,在這裡執行,這個函式時
中的虛函式,虛函式你該知道它意味著什麼。但是它通常是不需要改寫的。所以就是呼叫
的。接著就到了
initinstance
函式,哦,這個也是
中的乙個虛函式,但是在
cmfc_dialog
類中改寫了該函式,那麼現在該呼叫哪個呢?你該知道的,夥計,如果你不知道,那就該挨罵了,當然是子類的了,因為是改寫了它,這個函式我們是必須改寫的,在你的程式中,你會看到的。
哦,再看看在
initinstance
中發生了什麼事情呢?
cmfc_dialogdlg
dlg;
m_pmainwnd = &dlg;
int_ptr nresponse = dlg.domodal();
是的,就是這段**!什麼意思?乙個子類的物件,然後將主視窗的指標指向這個物件,意思就是說這個物件現在就是主視窗了,是吧!沒錯,是的。接下來,就是獲得對話方塊視窗的返回值賦值給
nresponse
,不錯的想法,做的不錯。
接下來,mfc自己又做了很多任務作,你不知道的工作,如果想知道,那就去看看《深入淺出mfc》這本書。最後到了run函式,這個函式時幹嘛的?是執行訊息迴圈的,什麼是訊息迴圈?不好意思?我不能講,是將起來的話,那就太多了,大概就是,例如:乙個按鈕,你把這個按鈕按下去了,然後,該幹什麼了?是的,你作為程式設計師你要知道的,按下去以後就是執行一段程式,一段處理當這個按鈕按下去時該執行的程式,是什麼程式,不好意思,我也不知道,這個程式該由自己去完成。就是說,按鈕按下,產生乙個訊息,乙個訊息到達了對應的訊息處理函式(就是你要去實現的函式),然後完成某個特定的功能。好了,累死我了,夥計,要是有杯咖啡多好!
哦,簡單的理論講完了,該到程式中來看看了。如果這麼點理論看不懂,可能是我講的不清楚,也有可能是你的iq......。哦,你是聰明的,我不該這麼說的。如果你去看《深入淺出mfc》,你會哭的,你會哭的像人搶走小孩的棒棒糖一樣的哭,很傷心的。哦,我不想看到你們受傷,所以就是我的悲劇,來寫部落格。累......
最後,我把乙個簡單mfc程式的**貼上,你們自己看吧。通過這個程式,首先,熟悉
visual studio 2008
MFC之對話方塊
對話方塊可以分為模式對話方塊和非模式對話方塊兩種。模式對話方塊是指使用者只能在當前的窗體中進行操作,在該窗體沒有關閉之前不能切換到其他的窗體。非模式對話方塊是指當前的所操作的窗體可以切換。一般情況下,用於確認資訊的操作和一般的操作的對話方塊屬於模式對話方塊。如開啟檔案對話方塊就是典型的模式對話方塊,...
MFC 對話方塊
1 建立對話方塊模板,設定對話方塊屬性 cadditionddlg 主對話方塊類 顯示的主要介面 addition的資源樹 4個子項 dialog 對話方塊 含有2個對話方塊模板 id為idd aboutbox 關於對話方塊模板 idd addtion dlalog 主對話方塊模板 lcon 圖示 ...
MFC基於對話方塊程式
001 020 else if nresponse idcancel 如果對話方塊是用取消來關閉的,則 021 025 026 由於對話方塊已關閉,所以將返回 false 以便退出應用程式,027 而不是啟動應用程式的訊息幫浦。028 return false 029 因為initinstance ...