DRAWITEMSTRUCT ( drawitem )

 

  來由:DRAWITEMSTRUCT 爲須要自繪的控件或者菜單項提供了必要的信息。在須要繪製的控件或者菜單項對應的WM_DRAWITEM消息函數中獲得一個指向該結構的指針。
例子:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); (.h中聲明)
void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) (.cpp中定義)
這裏LPDRAWITEMSTRUCT即指向DRAWITEMSTRUCT結構體的指針。
DRAWITEMSTRUCT結構的定義以下:
typedef struct tagDRAWITEMSTRUCT {
UINT CtlType;
UINT CtlID;
UINT itemID;
UINT itemAction;
UINT itemState;
HWND hwndItem;
HDC hDC;
RECT rcItem;
ULONG_PTR itemData;
} DRAWITEMSTRUCT, NEAR *PDRAWITEMSTRUCT, FAR *LPDRAWITEMSTRUCT
;結構成員:
成員:
CtlType
指定了控件的類型,其取值以下表所示。
ODT_BUTTON:按鈕控件
ODT_COMBOBOX:組合框控件
ODT_LISTBOX:列表框控件
ODT_LISTVIEW:列表視圖控件
ODT_MENU:菜單項
ODT_STATIC:靜態文本控件
ODT_TAB:Tab控件
CtlID
指定了自繪控件的ID值,而對於菜單項則不須要使用該成員
itemID
表示菜單項ID,也能夠表示列表框或者組合框中某項的索引值。對於一個空的列表框或組合框,該成員的值爲–1。這時應用程序只繪製焦點矩形(該矩形的座標由rcItem 成員給出)雖然此時控件中沒有須要顯示的項,可是繪製焦點矩形仍是頗有必要的,由於這樣作可以提示用戶該控件是否具備輸入焦點。固然也能夠設置itemAction 成員爲合適值,使得無需繪製焦點。
itemAction
指定繪製行爲,其取值能夠爲下表中所示值的一個或者多個的聯合。
ODA_DRAWENTIRE:當整個控件都須要被繪製時,設置該值
ODA_FOCUS:若是控件須要在得到或失去焦點時被繪製,則設置該值。此時應該檢查itemState成員,以肯定控件是否具備輸入焦點。
ODA_SELECT
若是控件須要在選中狀態改變時被繪製,則設置該值。此時應該檢查itemState 成員,以肯定控件是否處於選中狀態。
itemState
指定了當前繪製操做完成後,所繪項的可見狀態。例如,若是菜單項應該被灰色顯示,則能夠指定ODS_GRAYED狀態標誌。其取值能夠爲下表中所示值的一個或者多個的聯合。
ODS_CHECKED:若是菜單項將被選中,則可設置該值。該值只對菜單項有用。
ODS_COMBOBOXEDIT:在自繪組合框控件中只繪製選擇區域。
ODS_DEFAULT:默認值。
ODS_DISABLED:若是控件將被禁止,則設置該值。
ODS_FOCUS:若是控件須要輸入焦點,則設置該值。
ODS_GRAYED:若是控件須要被灰色顯示,則設置該值。該值只在繪製菜單時使用。
ODS_HOTLIGHT:Windows 98/Me, Windows 2000/XP: 若是鼠標指針位於控件之上,則設置該值,這時控件會顯示高亮顏色。
ODS_INACTIVE:Windows 98/Me, Windows 2000/XP: 表示沒有激活的菜單項。
ODS_NOACCEL:Windows 2000/XP: 控件是否有快速鍵盤。
ODS_NOFOCUSRECT:Windows 2000/XP: 不繪製捕獲焦點的效果。
ODS_SELECTED:選中的菜單項。
hwndItem
指定了組合框、列表框和按鈕等自繪控件的窗口句柄;若是自繪的對象時菜單項,則表示包含該菜單項的菜單句柄。
hDC
指定了繪製操做所使用的設備環境。
rcItem
指定了將被繪製的矩形區域。這個矩形區域就是上面hDC的做用範圍。系統會自動裁剪組合框、列表框或按鈕等控件的自繪製區域之外的部分。也就是說rcItem中的座標點(0,0)指的就是控件的左上角。可是系統不裁剪菜單項,因此在繪製菜單項的時候,必須先經過必定的換算獲得該菜單項的位置,以保證繪製操做在咱們但願的區域中進行。
itemData
對於菜單項,該成員的取值能夠是由
CMenu::AppendMenu、
CMenu::InsertMenu或者
CMenu::ModifyMenu
等函數傳遞給菜單的值。
對於列表框或這組合框,該成員的值能夠爲由
ComboBox::AddString、
CComboBox::InsertString、
CListBox::AddString或者
CListBox::InsertString
等傳遞給控件的值。

  若是ctlType 的取值是ODT_BUTTON或者ODT_STATIC, itemData的取值爲0。ide

文章轉自:http://baike.baidu.com/view/1906508.ht函數

相關文章
相關標籤/搜索