MFC Object和Windows Object的關係

來源:互聯網
上載者:User
MFC中最重要的封裝是對Win32 API的封裝,因此,理解Windows Object和MFC Object (C++對象,一個C++類的執行個體)之間的關係是理解MFC的關鍵之一。所謂Windows Object(Windows對象)是Win32下用控制代碼表示的Windows作業系統對象;所謂MFC Object (MFC對象)是C++對象,是一個C++類的執行個體,這裡(本書範圍內)MFC Object是有特定含義的,指封裝Windows Object的C++ Object,並非指任意的C++ Object。

下面,對MFC Object和Windows Object作一個比較。有些論斷對裝置描述表(MFC類是CDC,控制代碼是HDC)可能不適用,但具體涉及到時會指出。
  1. 從資料結構上比較
MFC Object是相應C++類的執行個體,這些類是MFC或者程式員定義的; Windows Object是Windows系統的內部結構,通過一個控制代碼來引用; MFC給這些類定義了一個成員變數來儲存MFC Object對應的Windows Object的控制代碼。對於裝置描述表CDC類,將儲存兩個HDC控制代碼。
  1. 從層次上講比較
MFC Object是高層的,Windows Object是低層的; MFC Object封裝了Windows Object的大部分或全部功能,MFC Object的使用者不需要直接應用Windows Object的HANDLE(控制代碼)使用Win32 API,代替它的是引用相應的MFC Object的成員函數。
  1. 從建立上比較
MFC Object通過建構函式由程式直接建立;Windows Object由相應的SDK函數建立。 MFC中,使用這些MFC Object,一般分兩步: 首先,建立一個MFC Object,或者在STACK中建立,或者在HEAP中建立,這時,MFC Object的控制代碼執行個體變數為空白,或者說不是一個有效控制代碼。 然後,調用MFC Object的成員函數建立相應的Windows Object,MFC的控制代碼變數儲存一個有效控制代碼。 CDC(裝置描述表類)的建立有所不同,在後面的2.3節會具體說明CDC及其衍生類別的建立和使用。 當然,可以在MFC Object的建構函式中建立相應的Windows對象,MFC的GDI類就是如此實現的,但從實質上講,MFC Object的建立和Windows Object的建立是兩回事。
  1. 從轉換上比較
可以從一個MFC Object得到對應的Windows Object的控制代碼;一般使用MFC Object的成員函數GetSafeHandle得到對應的控制代碼。 可以從一個已存在的Windows Object建立一個對應的MFC Object; 一般使用MFC Object的成員函數Attach或者FromHandle來建立,前者得到一個永久性對象,後者得到的可能是一個臨時對象。
  1. 從使用範圍上比較
MFC Object對系統的其他進程來說是不可見、停用;而Windows Object一旦建立,其控制代碼是整個Windows系統全域的。一些控制代碼可以被其他進程使用。典型地,一個進程可以獲得另一進程的視窗控制代碼,並給該視窗發送訊息。 對同一個進程的線程來說,只可以使用本線程建立的MFC Object,不能使用其他線程的MFC Object。
  1. 從銷毀上比較
MFC Object隨著解構函式的調用而消失;但Windows Object必須由相應的Windows系統函數銷毀。 裝置描述表CDC類的對象有所不同,它對應的HDC控制代碼對象可能不是被銷毀,而是被釋放。當然,可以在MFC Object的解構函式中完成Windows Object的銷毀,MFC Object的GDI類等就是如此實現的,但是,應該看到:兩者的銷毀是不同的。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.