視窗控制代碼、視窗類物件以及視窗之間的關係
air的技術檔案館
視窗控制代碼,提供了視窗的乙個標識,類似於指標的概念,每乙個視窗都對應了乙個視窗控制代碼作為其標識,通過控制代碼可以方便的從記憶體中索引到資源。視窗類的物件則是對應視窗類的乙個例項化,在mfc程式中,通過子類物件訪問類的函式時就不需要提供視窗控制代碼作為資源標識。
舉例說明:
sdk程式設計中建立乙個視窗首先要定義乙個視窗控制代碼,然後呼叫api函式建立並顯示視窗,此時需要向函式傳遞視窗控制代碼,具體如下:
hwnd hwnd;
hwnd=::createwindowex();
::showwindow(hwnd,sw_show);
::updatewindow(hwnd);
利用mfc開發程式時,在cwnd類中定義了乙個型別為控制代碼的成員變數hwnd m_hwnd, 類中有函式
hwnd createwindowex(dworddwexstyle
,// extended window stylelpctstrlpclassname
,// registered class namelpctstrlpwindowname
,// window namedworddwstyle
,// window styleintx
,// horizontal position of windowinty
,// vertical position of windowintnwidth
,// window widthintnheight
,// window heighthwndhwndparent
,// handle to parent or owner windowhmenuhmenu
,// menu handle or child identifierhinstancehinstancelpvoidlpparam
// window-creation data);
利用mfc開發程式時,在cwnd類中定義了乙個型別為控制代碼的成員變數hwnd m_hwnd, 類中有函式其返回值為乙個控制代碼,在函式體內部利用api函式createwindowex來完成視窗的建立。將其返回值儲存到m_hwnd中,在例項化乙個物件cwnd wnd;wnd.createx(...);
wnd.showwindow(sw_show);
wnd.updatewindow();
可見利用物件建立視窗不需要向函式傳遞視窗控制代碼資源。因為在cwnd中定義了乙個成員變數m_hwnd,由它儲存了這個視窗控制代碼,呼叫createwindowex時把控制代碼儲存到cwnd類中,
所以再次呼叫showwindow中就不用傳遞控制代碼。
這裡需要宣告一點此處的wnd物件並不是視窗,將視窗關閉的時候這個物件並沒有銷毀,僅僅是將控制代碼設定為null,物件和視窗生存週期之間沒有必然聯絡,物件和視窗唯一聯絡的紐帶是在類的內部有乙個視窗控制代碼的成員變數,儲存了相關視窗的控制代碼,所以當物件銷毀的時候這個視窗是要銷毀的。一般的說在執行到右大括號之前物件都是沒有被銷毀的,而此時若呼叫destroywindow則是銷毀視窗
對映視窗控制代碼物件
話題引入 在c語言時代,當人們使用純粹的c開發windows應用程式時,只需要通過視窗控制代碼hwnd hwnd是wnd的記憶體控制代碼,而wnd是windows是乙個內部私有資料結構,儲存著視窗的相關資訊 尺寸資訊 標題資訊等。一般來說開發人員無法訪問這個資料結構,不過可以以hwnd為引數呼叫wi...
視窗類 視窗類物件與視窗
我們可以發現,sdk 程式中多了乙個 hwnd 型別的變數 hwnd 該變數用來儲存由 createwindowex函式建立的視窗控制代碼,並將其作為引數傳遞給隨後的顯示視窗操作 showwindow 函式 和更新視窗操作 updatewindow 函式 而我們自定義的實現 中,cwnd 類定義了乙...
視窗和控制代碼
視窗是windows 應用程式中的乙個非常重要的元素,乙個 windows 應用程式至少要有乙個視窗,稱為主視窗。視窗是螢幕上的一塊矩形區域,是 windows 應用程式與使用者進行互動的介面。利用視窗,可以接收使用者的輸入,以及顯示輸出。乙個應用程式視窗通常都包含標題欄,選單欄,系統選單,最小化框...