MFC六大關(guān)鍵技術(shù)_第1頁
MFC六大關(guān)鍵技術(shù)_第2頁
MFC六大關(guān)鍵技術(shù)_第3頁
MFC六大關(guān)鍵技術(shù)_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

如有你有幫助,請購買下載,謝謝!如有你有幫助,請購買下載,謝謝!#頁分類:2007-05-1501:241446人閱讀(8)題外話:我并不認(rèn)為MFC減輕了程序員們的負(fù)擔(dān),MFC出現(xiàn)的目的雖然似乎是為了讓程序員不用懂得太多就可以進行視窗編程,但本人在 MFC里徘徊了很久很久(因為那時沒有書本詳細(xì)介紹MFC的原理),毫無收獲??赡芘笥褌儠f,怎么一定要了解MFC的具體呢,黑箱”作業(yè)不行嗎?這不是微軟的初衷嗎?不行?。?!如果這樣,我寧愿永遠(yuǎn)不選擇MFC!在學(xué)電腦之前,本人學(xué)習(xí)的東西大都與藝術(shù)不無關(guān)系,小學(xué)時參加過全國書畫比賽獲銀獎。兒時的愛好就是在一張紙上隨心所欲地畫畫!MFC“黑箱”就象一幅碩大的抽象畫(抽象到你不能理解),它用鉛筆勾畫好線條,然后請你填顏色。我們怎么能忍受黑箱”作業(yè)?我們選擇C++,就是因為它夠自由,夠藝術(shù),我們可以在此放飛幻想。所以,我們要攻克MFC。偉大孫老師在剖析MFC的時候雖然盡心盡力,但可能由于篇幅所限,說得并不大清楚(我相信許多學(xué)員都有這方面的感受)。在此,我突發(fā)奇想,想與大家一同分享一下著名的MFC六大關(guān)鍵技術(shù)。從什么地方開始講起好呢?我覺得回到最初摸索 MFC的時候,從基本談起最好。因為我知道,一個走過來程序員,總是忘記了當(dāng)初自己是怎么走過來的,忘記了一個學(xué)員最想知道的是什么。一個小小的問題(一兩句話就可以解釋的),足學(xué)以令手無寸鐵的學(xué)員頭大半個月,所以,我努力回憶當(dāng)初是怎么讓自己豁然開朗的。轉(zhuǎn)入正題:MFC的六大關(guān)鍵技術(shù)包括:MFC程序的初始化過程。運行時類型識別(RTTI)。動態(tài)創(chuàng)建。永久保存。消息映射。消息傳遞。MFC程序的初始化過程1、設(shè)計一個簡單完整MFC程序,產(chǎn)生一個窗口。當(dāng)然這不能讓AppWizard自動為我們生成。我們可以在Win32Application工程下面那樣寫:#ineludevafxwin.h>classMyApp:publicCWinApp{public:BOOLInitInstance()//②程序入點{CFrameWnd*Frame=newCFrameWnd();〃構(gòu)造框架m_pMainWnd=Frame;//將m_pMainWnd設(shè)定為Frame;Frame->Create(NULL,"最簡單的窗口");//建立框架Frame->ShowWindow(SW_SHOW);//顯示框架returntrue;//返回}};MyApptheApp;//①建立應(yīng)用程序。設(shè)定鏈接MFC庫,運行,即可看見一個窗口。從上面,大家可以看到建立一個MFC窗口很容易,只用兩步:一是從CWinApp派生一個應(yīng)用程序類(這里是MyApp),,然后建立應(yīng)用程序?qū)ο螅╰heApp),就可以產(chǎn)生一個自己需要的窗口(即需要什么樣就在InitInstance()里創(chuàng)建就行了)。整個程序,就改寫一個Initlnstance()函數(shù),創(chuàng)建那么一個對象(theApp),就是一個完整的窗口程序。這就是黑箱”乍業(yè)的魅力!?。。≡谖覀冋霝槲④浌恼频臅r候,我們突然覺得心里空蕩蕩的,我們想知道微軟幫我們做了什么事情,而我們想編自己的程序時又需要做什么事情,那怕在上面幾行的程序里面,我們還有不清楚的地方,比如,干嘛有一個 m_pMainWnd指針變量,它從哪里來,又要到哪里去呢?想一想在 DOS下編程是多么美妙的一件事呵,我們需要什么變量,就聲明什么變量,需要什么樣的函數(shù),就編寫什么樣的函數(shù),或者引用函數(shù)庫……但是現(xiàn)在我們怎么辦?。?!我們可以逆向思維一下,MFC要達到這種效果,它是怎么做的呢?首先我們要弄明白,VC不是一種語言,它就象我們學(xué)c語言的時候的一個類似記事本的編輯器(請原諒我的不貼切的比喻),所以,在VC里面我們用的是C++語言編程,C++才是根本(初學(xué)者總是以為VC是一門什么新的什么語言,一門比C++先進很多的復(fù)雜語言,汗)。說了那么多,我想用一句簡單的話概括“MFC黑箱'就是幫助我們插入了‘C+代碼的東西”既然MFC黑箱幫我們插入了代碼,那么大家想想它會幫我們插入什么樣的代碼呢?他會幫我們插入求解一元二次方程的代碼嗎?當(dāng)然不會,所以它插入的實際上是每次編寫窗口程序必須的,通用的代碼。再往下想,什么才是通用的呢?我們每次視窗編程都要寫WinMain()函數(shù),都要有注冊窗口,產(chǎn)生窗口,消息循環(huán),回調(diào)函數(shù)……即然每次都要的東西,就讓它們從我們眼前消失,讓MFC幫忙寫入!要知道MFC初始化過程,大家當(dāng)然可以跟蹤執(zhí)行程序。孫老師的第三課跟蹤了很長一段時間,我相信大家都有點暈頭轉(zhuǎn)向。本人覺得那怕你理解了 MFC代碼,也很容易讓人找不著北,我們完全不懂的時候,在成千上萬行程序的迷宮中如何能找到出口?我們要換一種方法,不如就來重新編寫個MFC庫吧,嘩!大家不要笑,小心你的大牙,我不是瘋子(雖然瘋子也說自己不瘋)。我們要寫的就是最簡單的 MFC類庫,就是把MFC宏觀上的,理論上的東西寫出來。我們要用最簡化的代碼,簡化到剛好能運行。既然,我們這一節(jié)寫的是MFC程序的初始化過程,上面我們還有了一個可執(zhí)行的MFC程序。程序中只是用了兩個MFC類,一個是CWinApp,另一個是CFrameWnd。當(dāng)然,還有很多同樣重要MFC類如視圖類,文檔類等等。但在上面的程序可以不用到,所以暫時省去了它(總之是為了簡單)。好,現(xiàn)在開始寫MFC類庫吧 唉,面前又有一個大難題,就是讓大家背一下 MFC層次結(jié)構(gòu)圖。天,那張魚網(wǎng)怎么記得住,但既然我們要理解他,總得知道它是從那里派生出來的吧??紤]到大家都很辛苦,那我們看一下上面兩個類的父子關(guān)系 (箭頭代表派生):CObject->CCmdTarget->CWinThread->CWinApp-> 自己的重寫了Initlnstance()的應(yīng)用程序類。CObject(同上)->CCmdTarget(同上)->CWnd->CFrameWnd看到層次關(guān)系圖之后,終于可以開始寫 MFC類庫了。按照上面層次結(jié)構(gòu),我們可以寫以下六個類(為了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論