DRAWITEMSTRUCT

DRAWITEMSTRUCT結構 為需要自繪的控制項或者選單項提供了必要的信息。在需要繪製的控制項或者選單項對應的WM_DRAWITEM訊息函式中得到一個指向該結構的指針。該結構是由收到的WM_DRAWITEM訊息的lParam參數提供的,這個參數是指向這個結構的指針。

例子

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); //(.h中聲明)

void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) //(.cpp中定義)

這裡LPDRAWITEMSTRUCT即指向DRAWITEMSTRUCT結構體的指針。

對於DRAWITEMSTRUCT結構 在VB中套用時,由於lParam參數提供的是指向DRAWITEMSTRUCT結構的指針,因此,我們需要用CopyMemory將指針複製到一個聲明為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:

對於 選單項,該成員的取值可以是由

CMenu::AppendMenu、CMenu::InsertMenu或者CMenu::ModifyMenu等函式傳遞給選單的值。

對於 列表框組合框,該成員的值可以為由

ComboBox::AddString、CComboBox::InsertString、CListBox::AddString或者CListBox::InsertString等傳遞給控制項的值。

如果ctlType 的取值是ODT_BUTTON或者ODT_STATIC, itemData的取值為0。

相關詞條

相關搜尋

熱門詞條

聯絡我們