2014-05-24 51 views
0

說我有一個Windows列表視圖有兩列,然後我可以得到具有LVM_GETITEMRECT的行的Rec,但該Rec不包括ListView未被列覆蓋的區域,我如何確定這一點矩形區域,所以我可以畫出來嗎?ListView行非列矩形

enter image description here

在圖片中我想要的區域是藍色的高亮到無柱權,這基本上是剛剛到全行選擇看起來像它的全排。

回答

1

一旦獲得該行的RECT,只需將其right字段更改爲與ListView客戶區的寬度相同的值。

RECT rectRow; 
ListView_GetItemRect(hListView, iRow, &rectRow, LVIR_BOUNDS); 

RECT rectCli; 
GetClientRect(hListView, &rectCli); 

rectRow.right = (rectCli.right - rectCli.left); 
+0

謝謝,你知道這不正是我想要什麼,但我重繪非行區域代碼是關於LVN_ITEMCHANGED事件,不能使用LVN_ITEMCHANGING因爲老闆的數據,其引起有點滯後,其中的行被刪除突出顯示,然後突出顯示新選擇的行,然後非突出顯示的非行區域被高亮顯示,您不會知道繪製非行區域的正確事件? –

+0

'LVN_ITEMCHANG(ING/ED)'不是繪畫事件。您應該只在「NM_CUSTOMDRAW」事件中繪製所有內容。如果您需要在發生更改時觸發重繪,請使用'LVM_REDRAWITEMS'。 –