明明白白看MFC之程式框架

2021-04-01 06:36:10 字數 2325 閱讀 6619

對於程式設計師來說,如果要提高程式設計效率,乙個好用的,功能強大的並且可以得心應手使用的程式設計工具往往會給我們程式設計師帶來莫大的方便。其實對於現在的程式設計工具來說,使用哪一種工具都不是問題的關鍵,重要的是你能夠使用到什麼程度,畢竟現在的工具都是非常的強大,對於一般的程式設計任務來說還沒有不能夠勝任的工具,否則的話恐怕他就不可能在這個世界上存在哪怕是只有乙個月的生命。但是根據個人所好以及周圍的人的影響,我們都會去使用某一種或者幾種工具。比較visual basic 、c++ builder和delphi等程式設計工具,用vc++編寫windows應用程式可以說是最富於挑戰性和艱巨性。在本文中我無意去比較各種工具的好壞,僅就我自己學習visual c++的mfc的體會和心得拿出來與大家一起分享和交流,也希望可以結識更多的志同道合的朋友。

就我個人的偏見,學習vc++就應該要學習他的類庫mfc(microsoft foundation classes)。也許有的人一聽說mfc就有點望而生畏,這是可以理解的,畢竟microsoft雖然給了我們乙個強大而且非常複雜的類庫,但是沒有給我們帶來學習他的好的方便之處。回想自己學習mfc時的無助和迷茫,以及所走過的彎路,現在想起來還心有餘悸,雖然我現在也還是處於非常初級的初級入門階段,但是還是很樂意把自己的心得和體會拿出來一起與大家分享。也希望得到大家的指點。

一、sdk應用程式結構

我學習mfc之路可是從windows程式設計開始的(可能這一開始就是彎路了^_^)。首先也請大家跟著我一起看乙個sdk應用程式結構的windows應用程式。當然也是經典的「hello world!」了,編寫的過程就不必羅嗦了,下面給出他的主要源**(我使用嚮導生成的,但是為了閱讀的方便經過了一點點的編輯):

lresult callback  wndproc(hwnd, uint, wparam, lparam);

int apientry winmain(hinstance hinstance,

hinstance hprevinstance,

lpstr   lpcmdline,

int    ncmdshow)

// main message loop:

while (getmessage(&msg, null, 0, 0)) }

return msg.wparam;

} bool initinstance(hinstance hinstance, int ncmdshow)

//視窗函式wndproc(),**函式

lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

return 0;

} sdk之"hello world"源程式

首先讓我們看一下這個程式的結構,winmain()是函式的入口點,該函式的主要任務是完成一些初始化的工作和維護了乙個訊息迴圈。他們的工作流程如下:入口(winmain())---à    myregisterclass()---->initinstance ()-àwhile訊息迴圈。函式由入口開始執行,之後呼叫 myregisterclass()註冊視窗類,之後initinstance ()生成並顯示視窗,這樣之後,就完成了乙個視窗的初始化工作了(當然,在 myregisterclass(),initinstance ()中都需要呼叫相應的api函式來具體的實現,不過我這裡重點分析的是他的結構,所以不考慮他的具體實現細節),然後就是維護訊息迴圈,至此,這個程式的基本結構就差不多建立了。以後程式的運作就靠個訊息迴圈來推動了。

現在,再讓我們看看那個訊息迴圈的結構,在例子程式中,我們是要程式在視窗中輸出一句"hello world"。在主程式中我們似乎已經把應用程式的框架全部分析的滴水不漏了,但是沒有看到要求程式輸出"hello world" 呀?這就是windows訊息的作用了,我們當然還記得剛剛我們說過主程式還維持了乙個訊息迴圈,不錯,就是在這個迴圈裡面大有文章。window應用程式的特點就是訊息驅動,當系統或者使用者要求應用程式完成某乙個任務的時候,所依靠的就是訊息,系統會把使用者的要求或者系統的要求放到乙個訊息結構中,然後傳送給應用程式,再去處理。我們現在來看看應用程式是怎麼來完成我們的任務的。在應用程式初始化完成之後,呼叫了乙個顯示視窗的api函式,所以系統知道了程式要顯示視窗了,此時(注意,這裡就是產生訊息的時機),此時就會在訊息佇列中產生乙個wm_paint訊息,這樣,應用程式的訊息迴圈就可以捕捉到這個訊息並且將它傳送給視窗函式(注意,這個函式是由系統呼叫的),然後視窗函式就處理這個訊息,我們就是在他處理這個訊息的時候讓他完成我們的任務的。從這個過程中我們可以看到,如果我們要與程式互動的話,需要做得僅僅就是選擇適當的時機讓系統產生訊息了。現在,我們終於可以完全明白sdk的程式的運作過程了。

ok,乙個sdk的應用程式的框架就這樣被建立了,下面我們再來看看如何建立乙個mfc的應用程式的框架,以及這兩者之間的對應關係。

明明白白看MFC之程式框架(一)

對於程式設計師來說,如果要提高程式設計效率,乙個好用的,功能強大的並且可以得心應手使用的程式設計工具往往會給我們程式設計師帶來莫大的方便。其實對於現在的程式設計工具來說,使用哪一種工具都不是問題的關鍵,重要的是你能夠使用到什麼程度,畢竟現在的工具都是非常的強大,對於一般的程式設計任務來說還沒有不能夠...

《明明白白看MFC之程式框架(三)》

三 mfc 程式結構大剖析 在前面我分別給出了sdk和mfc 應用程式的框架,並且稍微理了一下它們之間的對應關係。但是對於mfc 程式來說,要想真正搞懂它的框架的話,還是不夠的。現在我要做的事就是繼續去分析一下上面的mfc 程式,期望能夠如我的標題所言,明明白白的看透mfc 的應用程式框架。首先就是...

明明白白之搜尋演算法

1 定義 搜尋演算法是去搜尋每乙個可能,主要分以下幾種演算法 列舉法 暴力搜尋 深度優先搜尋 廣度優先搜尋 回溯2 深度優先搜尋 一條道走到黑 1 判斷邊界條件,向上回退 2 解決當前這一步需要做什麼 3 使用相同的邏輯處理下一步 3 廣度優先搜尋 為了便於進行搜尋,要設定乙個表儲存所有的結點。由於...