(1)MFC簡介及MFC Object與Windows Object之間的比較

來源:互聯網
上載者:User

標籤:利用   等等   編輯   class   變數   操作   很多   16px   封裝   

MFC(微軟基礎類庫)

  微軟基礎類庫(Microsoft Foundation Classes,簡稱MFC)是微軟公司提供的一個類庫(class libraries),以C++類的形式封裝了Windows API,並且包含一個應用程式架構,以減少應用程式開發人員的工作量。其中包含大量Windows控制代碼封裝類和很多Windows的內建控制項和組件的封裝類。

VC++簡介:

vc++是微軟公司開發的c/c++的整合式開發環境,所謂整合式開發環境,就是說利用它可以編輯,編譯,調試,而不是使用多種工具輪換操作,靈活性較大。vc也指它的內部編譯器,整合式開發環境必須有一個編譯器核心,例如DevC++其中一個編譯器核心就是gcc。 MFC除了是一個類庫以外,還是一個架構,在vc++裡建立一個MFC的工程,開發環境會自動幫你產生許多檔案,同時它使用了mfcxx.dll。xx是版本,它封裝了mfc核心,所以你在你的代碼看不到原本的SDK編程中的訊息迴圈等等東西,因為MFC架構幫你封裝好了,這樣你就可以專心的考慮你程式的邏輯,而不是這些每次編程都要重複的東西,但是由於是通用架構,沒有最好的針對性,當然也就喪失了一些靈活性和效率。但是MFC的封裝很淺,所以效率上損失不大。

 

MFC中最重要的封裝是對Win32 API的封裝,理解MFC的關鍵是理解Windows Object和MFC Object (C++對象,一個C++類的執行個體)之間的關係;其中,Windows Object(Windows對象)是Win32下用控制代碼表示的Windows作業系統對象;而MFC Object (MFC對象)是C++對象,是一個C++類的執行個體,封裝了Windows Object(windows對象)的C++ Object,並非指任意的C++ Object。

  

MFC Object 和Windows Object是不一樣的,但兩者緊密聯絡;

 

下面以C++的視窗對象和window的視窗為例,簡單說說其中的聯絡:

一個MFC視窗對象是一個C++ CWnd類(或衍生類別)的執行個體,是程式直接建立的。在程式執行中它隨著視窗類別建構函式的調用而產生,隨著解構函式的調用而消失。但Windows視窗則是Windows系統的一個內部資料結構的執行個體,由一個“視窗控制代碼”標識,Windows系統建立它並給它分配系統資源。Windows視窗在MFC視窗對象建立之後,由CWnd類的Create成員函數建立,“視窗控制代碼”儲存在視窗對象的m_hWnd成員變數中。Windows視窗可以被一個程式銷毀,也可以被使用者的動作銷毀;

 

下面將作出一些比較:

(1)資料結構不同:

  MFC Object是相應C++類的執行個體,這些類是MFC或者程式員定義的;Windows Object是Windows系統的內部結構,通過一個控制代碼來引用;

(2)層次上的不同:   

  MFC Object是高層的,Windows Object是低層的;MFC Object封裝了Windows Object的大部分或全部功能,MFC Object的使用者不需要直接應用Windows Object的HANDLE(控制代碼)使用Win32 API,代替它的是引用相應的MFC Object的成員函數。 (3)建立方式的不同:  MFC Object通過建構函式由程式直接建立;Windows Object由相應的SDK函數建立。MFC中,使用這些MFC Object,一般分兩步:首先,建立一個MFC Object,或者在棧中建立,或者在堆中建立,這時,MFC Object的控制代碼執行個體變數為空白,或者說不是一個有效控制代碼。然後,調用MFC Object的成員函數建立相應的Windows Object,MFC的控制代碼變數儲存一個有效控制代碼。 (4)使用範圍的不同:  MFC Object對系統的其他進程來說是不可見、停用;而Windows Object一旦建立,其控制代碼是整個Windows系統全域的。一些控制代碼可以被其他進程使用。典型地,一個進程可以獲得另一進程的視窗控制代碼,並給該視窗發送訊息。對同一個進程的線程來說,只可以使用本線程建立的MFC Object,不能使用其他線程的MFC Object。 (5)銷毀上的不同:  MFC Object隨著解構函式的調用而消失;但Windows Object必須由相應的Windows系統函數銷毀。裝置描述表CDC類的對象有所不同,它對應的HDC控制代碼對象可能不是被銷毀,而是被釋放。當然,可以在MFC Object的解構函式中完成Windows Object的銷毀,MFC Object的GDI類等就是如此實現的,但是,應該看到:兩者的銷毀是不同的。 怎樣轉換在MFC Object和Windows對象之間進行轉換呢?  可以從一個MFC Object得到對應的Windows Object的控制代碼;一般使用MFC Object的成員函數GetSafeHandle得到對應的控制代碼。可以從一個已存在的Windows Object建立一個對應的MFC Object; 一般使用MFC Object的成員函數Attach或者FromHandle來建立,前者得到一個永久性對象,後者得到的可能是一個臨時對象。 MFC Object和Windows Object的對應關係: 
描述 Windows控制代碼 MFC Object
視窗 HWND CWnd and CWnd-derived classes
裝置上下文 HDC CDC and CDC-derived classes
菜單 HMENU CMenu
HPEN CGdiObject類,CPen和CPen-derived classes
刷子 HBRUSH CGdiObject類,CBrush和CBrush-derived classes
字型 HFONT CGdiObject類,CFont和CFont-derived classes
位元影像 HBITMAP CGdiObject類,CBitmap和CBitmap-derived classes
調色盤 HPALETTE CGdiObject類,CPalette和CPalette-derived classes
地區 HRGN CGdiObject類,CRgn和CRgn-derived classes
映像列表 HimageLIST CimageList和CimageList-derived classes
通訊端 SOCKET CSocket,CAsynSocket及其衍生類別
 

其中:GDI對象包括BITMAP,BRUSH,FONT,PALETTE,PEN,RGN;

 

(1)MFC簡介及MFC Object與Windows Object之間的比較

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.