-
DRAWITEMSTRUCT
鎖定
- 外文名
- DRAWITEMSTRUCT
- 目 的
- 提供了必要的信息
- 指 向
- 這個結構的指針
- 例 子
- 在VB中應用
DRAWITEMSTRUCT例子
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); //(.h中聲明)
void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) //(.cpp中定義)
這裏LPDRAWITEMSTRUCT即指向DRAWITEMSTRUCT結構體的指針。
對於DRAWITEMSTRUCT結構在VB中應用時,由於lParam參數提供的是指向DRAWITEMSTRUCT結構的指針,因此,我們需要用CopyMemory將指針複製到一個聲明為DRAWITEMSTRUCT結構類型的變量中,詳細請參見
[2]
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 | 4 | 按鈕控件 |
ODT_COMBOBOX | 3 | 組合框控件 |
ODT_LISTBOX | 2 | 列表框控件 |
ODT_LISTVIEW | 102 | 列表視圖控件 |
ODT_MENU | 1 | 菜單項 |
ODT_STATIC | 5 | 靜態文本控件 |
ODT_TAB | 101 | Tab控件 |
經實測這些常量值是十進制的。
CtlID:
指定了自繪控件的ID值,而對於菜單項則不需要使用該成員
itemID:
表示菜單項ID,也可以表示列表框或者組合框中某項的索引值。對於一個空的列表框或組合框,該成員的值為–1。這時應用程序只繪製焦點矩形(該矩形的座標由rcItem 成員給出)雖然此時控件中沒有需要顯示的項,但是繪製焦點矩形還是很有必要的,因為這樣做能夠提示用户該控件是否具有輸入焦點。當然也可以設置itemAction 成員為合適值,使得無需繪製焦點。
itemAction:
指定繪製行為,其取值可以為下表中所示值的一個或者多個的聯合。
ODA_DRAWENTIRE=H1:當整個控件都需要被繪製時,設置該值
ODA_FOCUS=H4:如果控件需要在獲得或失去焦點時被繪製,則設置該值。此時應該檢查itemState成員,以確定控件是否具有輸入焦點。
ODA_SELECT=H2
如果控件需要在選中狀態改變時被繪製,則設置該值。此時應該檢查itemState 成員,以確定控件是否處於選中狀態。
itemState:
指定了當前繪製操作完成後,所繪項的可見狀態。例如,如果菜單項應該被灰色顯示,則可以指定ODS_GRAYED狀態標誌。其取值可以為下表中所示值的一個或者多個的聯合。
ODS_CHECKED=H8:如果菜單項將被選中,則可設置該值。該值只對菜單項有用。
ODS_COMBOBOXEDIT=H1000:在自繪組合框控件中只繪製選擇區域。
ODS_DEFAULT=H20:默認值。
ODS_DISABLED=H4:如果控件將被禁止,則設置該值。
ODS_FOCUS=H10:如果控件需要輸入焦點,則設置該值。
ODS_GRAYED=H2:如果控件需要被灰色顯示,則設置該值。該值只在繪製菜單時使用。
ODS_HOTLIGHT=H40:Windows 98/Me, Windows 2000/XP: 如果鼠標指針位於控件之上,則設置該值,這時控件會顯示高亮顏色。
ODS_INACTIVE=H80:Windows 98/Me, Windows 2000/XP: 表示沒有激活的菜單項。
ODS_NOACCEL=H100:Windows 2000/XP: 控件是否有快速鍵盤。
ODS_NOFOCUSRECT=H200:Windows 2000/XP: 不繪製捕獲焦點的效果。
ODS_SELECTED=H1:選中的菜單項。
hwndItem:
hDC:
指定了繪製操作所使用的設備環境。
rcItem:
指定了將被繪製的矩形區域。這個矩形區域就是上面hDC的作用範圍。系統會自動裁剪組合框、列表框或按鈕等控件的自繪製區域以外的部分。也就是説rcItem中的座標點(0,0)指的就是控件的左上角。但是系統不裁剪菜單項,所以在繪製菜單項的時候,必須先通過一定的換算得到該菜單項的位置,以保證繪製操作在我們希望的區域中進行。
itemData:
對於菜單項,該成員的取值可以是由
如果ctlType 的取值是ODT_BUTTON或者ODT_STATIC, itemData的取值為0。
- 參考資料
-
- 1. DRAWITEMSTRUCT 結構 .微軟[引用日期2012-09-18]
- 2. VB進行子類化 .百度[引用日期2012-09-18]
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:15次歷史版本
- 最近更新: cjinglant55