轉帖|使用教程|編輯:鮑佳佳|2021-06-24 11:56:45.523|閱讀 740 次
概述:如果你是在windows平臺上做GUI開發,MFC是一個很好的選擇,畢竟windows累積用戶群龐大,市場接受程度高。但是,學習MFC不僅僅要學習用MFC,還要學習MFC的框架設計思想。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
MFC基礎入門、案例教程
如果你是在windows平臺上做GUI開發,MFC是一個很好的選擇,畢竟windows累積用戶群龐大,市場接受程度高。但是,學習MFC不僅僅要學習用MFC,還要學習MFC的框架設計思想。
如果僅僅會用MFC的話,可能在找工作的時候,一旦工作內容離開了MFC,就什么也不會了。學習任何東西都是一樣的,學的是方法,而不僅僅是某個技術本身,因為技術肯定不停地更新的,你今天學的現在能用上,但是誰也不能保住以后會怎么樣,但是萬變不離其中,懂得了方法,學什么都一樣。
MFC作為一個誕生了20年的成熟的框架,其設計思想是很值得我們學習的。當然,如果和Qt、Andorid和IOS那種更加"現代化"框架相比,MFC確實顯得有點不合時宜。
但是,如果你粗略讀一讀MFC源代碼就會發現MFC的厲害之處。無法想象MFC在那個連C++的STL都還沒出現的年代,就用泛型編程技術寫出了CList、CArray、CMap等容器。MFC不僅僅是將面向過程的API封裝為面向對象的形式,他還在背后做了很多事情,包括簡化一些過程,提高一些穩定性(當然主要是針對于Windows平臺)。
很多公司在一些做了很久的項目上,往往都是有自己的類庫、自己的框架,我們只需要在其基礎上不斷的完善和擴展。如果你不了解類庫,你是根本無從下手。這也是我們要學習類庫、框架設計的原因。
我們在編寫標準C程序的時候,經常會調用各種庫函數來輔助完成某些功能:初學者使用得最多的C庫函數就是printf了,這些庫函數是由你所使用的編譯器廠商提供的。在Windows平臺下,也有類似的函數可供調用:不同的是,這些函數是由Windows操作系統本身提供的。
SDK: 軟件開發工具包(Software Development Kit),一般都是一些被軟件工程師用于為特定的軟件包、軟件框架、硬件平臺、操作系統等建立應用軟件的開發工具的集合。
API函數: Windows操作系統提供給應用程序編程的接口(Application Programming Interface)
Windows應用程序API函數是通過C語言實現的,所有主要的 Windows 函數都在 Windows.h 頭文件中進行了聲明。Windows 操作系統提供了 1000 多種 API 函數。
窗口是 Windows 應用程序中一個非常重要的元素,一個 Windows 應用程序至少要有一個窗口,稱為主窗口。窗口是屏幕上的一塊矩形區域,是 Windows 應用程序與用戶進行交互的接口。利用窗口可以接收用戶的輸入、以及顯示輸出。一個應用程序窗口通常都包含標題欄、菜單欄、系統菜單、最小化框、最大化框、 可調邊框,有的還有滾動條。如下圖:
窗口可以分為客戶區和非客戶區, 如上圖。 客戶區是窗口的一部分, 應用程序通常在客戶區中顯示文字或者繪制圖形。 標題欄、 菜單欄、 系統菜單、 最小化框和最大化框、 可調邊框統稱為窗口的非客戶區, 它們由 Windows 系統來管理, 而應用程序則主要管理客戶區的外觀及操作。
窗口可以有一個父窗口, 有父窗口的窗口稱為子窗口。除了上圖所示類型的窗口外, 對話框和消息框也是一種窗口。 在對話框上通常還包含許多子窗口, 這些子窗口的形式有按鈕、 單選按鈕、 復選框、 組框、 文本編輯框等。
在 Windows 應用程序中, 窗口是通過窗口句柄( HWND) 來標識的。 我們要對某個窗口進行操作, 首先就要得到這個窗口的句柄。 句柄( HANDLE) 是 Windows 程序中一個重要的概念, 使用也非常頻繁。 在 Windows 程序中, 有各種各樣的資源( 窗口、 圖標、光標,畫刷等), 系統在創建這些資源時會為它們分配內存, 并返回標識這些資源的標識號, 即句柄。 在后面的內容中我們還會看到圖標句柄( HICON)、 光標句柄( HCURSOR) 和畫刷句柄( HBRUSH)。
Windows 程序設計是一種完全不同于傳統的 DOS 方式的程序設計方法。它是一種事件驅動方式的程序設計模式,主要是基于消息的。例如,當用戶在窗口中畫圖的時候,按下鼠標左鍵,此時,操作系統會感知到這一事件,于是將這個事件包裝成一個消息,投遞到應用程序的消息隊列中,然后應用程序從消息隊列中取出消息并進行響應。在這個處理過程中,操作系統也會給應用程序“ 發送消息”。所謂“ 發送消息”,實際上是操作系統調用程序中一個專門負責處理消息的函數,這個函數稱為窗口過程。
消息
在 Windows 程序中,消息是由 MSG 結構體來表示的。MSG 結構體的定義如下:
該結構體中各成員變量的含義如下:
第一個成員變量 hwnd 表示消息所屬的窗口。
我們通常開發的程序都是窗口應用程序,一個消息一般都是與某個窗口相關聯的。例如,在某個活動窗口中按下鼠標左鍵,產生的按鍵消息就是發給該窗口的。在 Windows 程序中,用 HWND類型的變量來標識窗口。
第二個成員變量 message 指定了消息的標識符。
在 Windows 中, 消息是由一個數值來表示的, 不同的消息對應不同的數值。 但是由于數值不便于記憶, 所以 Windows 將消息對應的數值定義為 WM_XXX 宏( WM 是 Window Message 的縮寫) 的形式, XXX 對應某種消息的英文拼寫的大寫形式。 例如, 鼠標左鍵按下消息是 WM_LBUTTONDOWN, 鍵盤按下消息是 WM_KEYDOWN, 字符消息是 WM_CHAR , 等等。 在程序中我們通常都是以WM_XXX 宏的形式來使用消息的。
第三、 第四個成員變量 wParam 和 lParam,用于指定消息的附加信息。
例如, 當我們收到一個字符消息的時候,message 成員變量的值就是 WM_CHAR, 但用戶到底輸入的是什么字符,那么就由 wParam 和 lParam 來說明。wParam、lParam 表示的信息隨消息的不同而不同。如果想知道這兩個成員變量具體表示的信息,可以在 MSDN 中關于某個具體消息的說明文檔查看到。WPARAM 和 LPARAM 這兩種類型的定義,實際上就是 unsigned int和 long。
第五、第六個變量分別表示消息投遞到消息隊列中的時間和鼠標的當前位置。
每一個 Windows 應用程序開始執行后, 系統都會為該程序創建一個消息隊列, 這個消息隊列用來存放該程序創建的窗口的消息。 例如, 當我們按下鼠標左鍵的時候, 將會產生WM_LBUTTONDOWN 消息, 系統會將這個消息放到窗口所屬的應用程序的消息隊列中,等待應用程序的處理。 Windows 將產生的消息依次放到消息隊列中, 而應用程序則通過一個消息循環不斷地從消息隊列中取出消息, 并進行響應。 這種消息機制, 就是 Windows程序運行的機制。 關于消息隊列和消息響應, 在后面我們還會詳細講述。
MFC界面開發控件:
轉載自:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: