ListView行非列矩形

ListView行非列矩形,listview,winapi,user32,Listview,Winapi,User32,假设我有一个包含两列的Windows ListView,那么我可以使用LVM_GETITEMRECT获取该行的Rec,但是该Rec不包括列未覆盖的ListView区域,我如何确定该矩形区域以便在其中绘制 在图片中,我想要的区域是右边的蓝色高亮显示,没有列,这基本上只是让整行选择看起来像它的整行 一旦获得行的RECT,只需将其右侧字段更改为与ListView客户端区域宽度相同的值即可 RECT rectRow; ListView_GetItemRect(hListView, iRow, &

假设我有一个包含两列的Windows ListView,那么我可以使用LVM_GETITEMRECT获取该行的Rec,但是该Rec不包括列未覆盖的ListView区域,我如何确定该矩形区域以便在其中绘制


在图片中,我想要的区域是右边的蓝色高亮显示,没有列,这基本上只是让整行选择看起来像它的整行

一旦获得行的
RECT
,只需将其
右侧
字段更改为与ListView客户端区域宽度相同的值即可

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

RECT rectCli;
GetClientRect(hListView, &rectCli);

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

谢谢,你知道这正是我想要的,但是我的非行区域重绘代码在LVN_ITEMCHANGED事件上,无法使用LVN_ITEMCHANGING,因为所有者数据,这会导致一点延迟,行被取消高亮显示,然后新选择的行高亮显示,然后非行区域被取消高亮显示,然后高亮显示,您可能不知道绘制非行区域的正确事件?
LVN\u ITEMCHANG(ING/ED)
不是绘制事件。您应该仅在
NM\u CUSTOMDRAW
事件中绘制所有内容。如果需要在某些内容发生更改时触发重画,请使用
LVM\u REDRAWITEMS