WIndows對象 C++對象 的關係

來源:互聯網
上載者:User

windows對象並不是我們平時所說的“面對對象”程式設計中的“類的對象”,而是一種windows資源實體,如畫筆、字型等,
而對這些windows對象我們用控制代碼來標識它們。
而C++對象則是真正的“物件導向”思想中的“類的對象”。
在windows編程中,除了普通的“類的對象”外,用得最多的“C++類的對象”應該是MFC對象了(如果你是用MFC編程的話),MFC對象是指“封裝了windows對象的C++對象”。
就拿CWnd類來說,我們定義一個CWnd類的對象myWnd後,我們不能直接對它進行顯示移動等操作(相當於我們還不能使用它),為什麼呢?因為我們還沒有給它封裝一個相應的windows對象(注意:CWnd類有一個成員變數 HWND m_hWnd ),所以我們要調用成員函數Create()。而這個Create()的功能就是建立一個windows視窗類別執行個體(它也是windows對象的一種,同樣我們也是用控制代碼來標識它,這裡我們用HWND類型控制代碼)並把這個視窗執行個體的控制代碼鏈到CWnd類的對象的成員變數m_hWnd上)。
當然,這裡之所以用Create()這一個函數就能實現的功能,在用API函數來實現就比較麻煩,但可以讓我們更清楚地瞭解這一過程:
CWnd myWnd;   //定義一個視窗類別(CWnd)的對象
HWND hWnd;   //定義視窗控制代碼hwnd
hwnd=CreateWindows(……);  //調用API函數CreateWindows(……)建立一個windows視窗類別執行個體,返回的是一個控制代碼,並把這個控制代碼賦給hWnd控制代碼。
myWnd.Attach(hwnd);   //將視窗執行個體的控制代碼鏈到CWnd對象myWnd上。
……
Destrory Window(hwnd); 

正為為很多人不知道其中的細節,所以在學習MFC Windows編程的時候,總是想不通為什麼建立了一個MFC類的對象還要調用那麼多初始化之類的函數,才能調用其它功能函數。而我們在平時建立一個C++對象之後總是能直接調用它的成員函數。

 

 

所謂Windows   Object(Windows對象)是Win32下用控制代碼表示的Windows作業系統對象;所謂MFC   Object   (MFC對象)是C++對象,是一個C++類的執行個體. 

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

 

MFC視窗的建立和windwos視窗的建立是有區別的,MFC   Object通過建構函式由程式直接建立;Windows   Object由相應的SDK函數建立。   
MFC中,使用這些MFC   Object,一般分兩步:   
    1、建立一個MFC   Object,或者在STACK中建立,或者在HEAP中建立,這時,MFC   Object的控制代碼執行個體變數為空白,或者說不是一個有效控制代碼。   
    2、調用MFC   Object的成員函數建立相應的Windows   Object,MFC的控制代碼變數儲存一個有效控制代碼。 

當然,可以在MFC   Object的建構函式中建立相應的Windows對象,MFC的GDI類就是如此實現的,但從實質上講,MFC   Object的建立和Windows   Object的建立是兩回事。   

無論是控制windows視窗的屬性不是它的狀態,兩者基本上沒有什麼不同,SetWindowText(...),SetIcon(...),SetMenu(...),只不過window   object多了一個控制代碼的參數罷了。 

還有你問的是C++對象和Windows對象的區別,我想這裡的C++對象應該是指MFC對象的吧

聯繫我們

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