MFC和Win32的比較

1、從數據結構上比較

  MFC Object是相應C++類的實例,這些類是MFC或者程序員定義的;

  Windows Object是Windows系統的內部結構,通過壹個句柄來引用;

  MFC給這些類定義了壹個成員變量來保存MFC Object對應的Windows Object的句柄。對於設備描述表CDC類,將保存兩個HDC句柄。

  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,或者在STACK中創建,或者在HEAP中創建,這時,MFC Object的句柄實例變量為空,或者說不是壹個有效的句柄。

  然後,調用MFC Object的成員函數創建相應的Windows Object,MFC的句柄變量存儲壹個有效句柄。

  4、從轉換上比較

  可以從壹個MFC Object得到對應的Windows Object的句柄;壹般使用MFC Object的成員函數GetSafeHandle得到對應的句柄。

  可以從壹個已存在的Windows Object創建壹個對應的MFC Object; 壹般使用MFC Object的成員函數Attach或者FromHandle來創建,前者得到壹個永久性對象,後者得到的可能是壹個臨時對象。

  5、從使用範圍上比較

  MFC Object對系統的其他進程來說是不可見、不可用的;而Windows Object壹旦創建,其句柄是整個Windows系統全局的。壹些句柄可以被其他進程使用。典型地,壹個進程可以獲得另壹進程的窗口句柄,並給該窗口發送消息。

  對同壹個進程的線程來說,只可以使用本線程創建的MFC Object,不能使用其他線程的MFC Object。

  6、從銷毀上比較

  MFC Object隨著析構函數的調用而消失;但Windows Object必須由相應的Windows系統函數銷毀。

  設備描述表CDC類的對象有所不同,它對應的HDC句柄對象可能不是被銷毀,而是被釋放