DRAWITEMSTRUCT自繪控制項結構體

2021-07-15 06:30:37 字數 3236 閱讀 7958

編輯本詞條缺少

編輯吧!

drawitemstruct結構

[1]為需要自繪的控制項或者選單項提供了必要的資訊。在需要繪製的控制項或者選單項對應的

wm_drawitem訊息函式中得到乙個指向該結構的

指標。該結構是由收到的wm_drawitem訊息的

lparam引數提供的,這個引數是指向這個結構的指標。

外文名

drawitemstruct

目    的

提供了必要的資訊

指    向

這個結構的指標

例    子

在vb中應用

1例子:

2結構定義

▪結構成員:

▪ctltype :

▪ctlid:

▪itemid:

▪itemaction:

▪itemstate:

▪hwnditem:

▪hdc:

▪rcitem:

▪itemdata:

編輯 virtual void drawitem(lpdrawitemstruct lpdrawitemstruct); //(.h中宣告)

void ccolorbutton::drawitem(lpdrawitemstruct lpdrawitemstruct) //(.cpp中定義)

這裡lpdrawitemstruct即指向drawitemstruct

結構體的指標。

對於drawitemstruct結構

在vb中應用時,由於

lparam引數提供的是指向drawitemstruct結構的指標,因此,我們需要用

copymemory將指標複製到乙個宣告為drawitemstruct結構型別的變數中,詳細請參見 

[2]

編輯 typedef struct tagdrawitemstruct drawitemstruct, near *pdrawitemstruct, far *lpdrawitemstruct

上述的結構中的每個成員的具體含義,用途如下:

指定了控制項的型別,其取值如下表所示。

常數名稱

取值

含義

odt_button

4

按鈕控制項

odt_combobox

3

組合框控制項

odt_listbox

2

列表框控制項

odt_listview

102

列表檢視控制項

odt_menu

1

選單項

odt_static

5

靜態文字控制項

odt_tab

101

tab控制項

經實測這些常量值是十進位制的。

指定了自繪控制項的id值,而對於選單項則不需要使用該成員

表示選單項id,也可以表示

列表框或者

組合框中某項的索引值。對於乙個空的列表框或組合框,該成員的值為–1。這時應用程式只繪製焦點矩形(該矩形的座標由rcitem 成員給出)雖然此時控制項中沒有需要顯示的項,但是繪製焦點矩形還是很有必要的,因為這樣做能夠提示使用者該控制項是否具有

輸入焦點。當然也可以設定itemaction 成員為合適值,使得無需繪製焦點。

指定繪製行為,其取值可以為下表中所示值的乙個或者多個的聯合。

oda_drawentire=h1:當整個控制項都需要被繪製時,設定該值

oda_focus=h4:如果控制項需要在獲得或失去焦點時被繪製,則設定該值。此時應該檢查itemstate成員,以確定控制項是否具有

輸入焦點。

oda_select=h2

如果控制項需要在選中狀態改變時被繪製,則設定該值。此時應該檢查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:選中的選單項。

指定了 組合框、

列表框和按鈕等自繪控制項的

視窗控制代碼;如果自繪的物件時選單項,則表示包含該選單項的選單控制代碼。

指定了繪製操作所使用的裝置環境。

指定了將被繪製的矩形區域。這個矩形區域就是上面hdc的作用範圍。系統會自動裁剪

組合框、

列表框或按鈕等控制項的自繪製區域以外的部分。也就是說rcitem中的座標點(0,0)指的就是控制項的左上角。但是系統不裁剪選單項,所以在繪製選單項的時候,必須先通過一定的換算得到該選單項的位置,以保證繪製操作在我們希望的區域中進行。

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

cmenu::

insertmenu或者cmenu::

modifymenu等函式傳遞給選單的值。

對於 列表框

或 組合框

,該成員的值可以為由

combobox::

addstring、

ccombobox::insertstring、

clistbox::addstring或者clistbox::insertstring等傳遞給控制項的值。

如果ctltype 的取值是odt_button或者odt_static, itemdata的取值為0。

自增「 」和自減「 」

int x 10 int j j x 看這邊 system.out.println x int x 10 int j x x 看這邊 system.out.println x 第乙個會輸出11,第二個會輸出10。這是今天偶然看到的,而這個解釋聽起來比較容易理解 x 是乙個表示式,它的值是x,在這個表...

正解自增 自減

許多語言都有自增 自減運算子。下面以c語言為例,將此類運算子的運算特徵正解一下 一 先看字尾 b 2 a b 計算過程 1.先計算表示式b 的值,結果為2 即將b自增前的值作為表示式b 的值 2.再將表示式b 的值賦值給a,即a得到2 3.最後將b自增後的值賦值給b,即b為3 注意 在此過程中,沒有...

MySQL 自聯結 自連線

例如想於下方表中找出與在 愛藝奇 公司的客戶同名的顧客。第一步 找出在 愛藝奇 的客戶的姓名,第二步 從全表中去查詢姓名與第一步查詢出來一樣的客戶 where cust name in in 不能寫成 不然容易報錯。因為子查詢有可能返回的是多條記錄。這跟子查詢只能返回單列無關,單列與單行。子查詢 s...