子窗口控件

首先說下子窗口控件的一些基本用途:

  1. 子窗口控件可以用於將一個大的用戶程序從界面上分成很多個功能小模塊,比如說爲一個應用程序添加一個Button,那麼Button自己可以接受鼠標的事件,然後自己做處理(比如說按鈕被按下的高亮效果),再把處理後的結果以新的消息的形式傳送回父窗口.hwndParent = GetParent (hwnd) 用於得到父窗口的句柄.再用SendMessage (hwndParent, message, wParam, lParam) ;送回個父窗口.這裏的message參數可以是在值上大於WM_USER的任意值,並且不能與預定義的WM_消息衝突.而這裏的wParam和lParam就可以隨意的根據需要來表示返回的參數,比如wParam可以返回子窗口的ID.
  2. 雖然你可以自己通過CreateWindow來創建子窗口,但是你也可以用WINDOWS預定義的一些子窗口,比如說:Button,Textbox,Label,CheckBox....就拿Button來說,你只需要一個簡簡單單的CreateWindow來創建它(不需要自己定義一個新的WIndow Class),然後在你的主窗口中捕獲WM_COMMAND消息就可以了,至於怎麼把Button畫出來,怎麼處理他的鼠標事件,在被點擊時高亮顯示,這些全部由WINDOWS來做,是不是很方便呢.
  3. 子窗口控件用的最多的就是在對話框中了.對話框中的子窗口控件的位置,大小都定義在程序資源腳本中(program's resource script).你也可以通過CreateWindow來創建子窗口控件,通過MoveWIndow來改變它的位置和大小,父窗口的Window procedure將消息發送到子窗口,然後子窗口控件做處理,在發送消息回到父窗口的window procedure.
  4. 在你的窗口裏面直接用子窗口控件比在對話筐中用要多做一些煩瑣的低層的東西.因爲對話框有對話框管理器實現了你的程序與子窗口控件的隔離.舉個例子來說,在程序裏面直接用子窗口控件時,子窗口不能自由的用Tab來或者鼠標來切換輸入焦點,當子窗口做完了輸入任務之後,它並不能把焦點傳回給父窗口.

下面來列出幾個在用子窗口控件時經常要處理的消息:

  1. WM_DRAWITEM:在OWNER_DRAWN Button , combo box, list box, or menu 需要進行繪圖時,由子窗口傳給父窗口.wParam:子控件的id,如果是menu就是0.lParam:指向一個DRAWITEMSTRUCT 的指針,這個結構體裏面有進行繪圖的所有信息.
  2. WM_CTLCOLORXXX:在XXX類型控件需要重新繪製時,傳給父窗口的消息.wParam:用於繪製子窗口的HDC.lParam:子窗口的句柄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章