ListView-所选单元格的绘图不正确

ListView-所选单元格的绘图不正确,listview,winapi,Listview,Winapi,如果ListView使用标准图形处理,则如下所示: 但是,如果我处理消息NM_CUSTOMDRAW并在CDDS_子项| | CDDS_itemprespaint中更改clrTextBk,它看起来是这样的: 要使所选单元格的绘图像标准一样,我需要做什么?请显示一个,以便我们可以帮助您。@JonathanPotter添加了代码。因此,您实际上不是在自己进行自定义绘图。有趣的是,我没有注意到控件的行为是这样的。我想实际上自己画可能是你唯一的选择。如果你需要自己画一个合适的矩形,ListView_G

如果ListView使用标准图形处理,则如下所示:

但是,如果我处理消息NM_CUSTOMDRAW并在CDDS_子项| | CDDS_itemprespaint中更改clrTextBk,它看起来是这样的:


要使所选单元格的绘图像标准一样,我需要做什么?

请显示一个,以便我们可以帮助您。@JonathanPotter添加了代码。因此,您实际上不是在自己进行自定义绘图。有趣的是,我没有注意到控件的行为是这样的。我想实际上自己画可能是你唯一的选择。如果你需要自己画一个合适的矩形,ListView_GetItemRect可以返回一个较小的矩形,该矩形将用于包含选定的项目。@AlexK。非常感谢。我应该在哪里使用CDDS中的ListView\u GetItemRect\u ITEMPOSTERASE?
//
if pnm^.code = NM_CUSTOMDRAW then
//
if not TblListViewFieldIsCreate then
begin
//
LPNMLVCD:=LPNMLVCUSTOMDRAW(lPrm);

//
  case LPNMLVCD^.nmcd.dwDrawStage of
...

//
CDDS_SUBITEM or CDDS_ITEMPREPAINT:
    begin
//
if ListViewItemSel = LPNMLVCD^.nmcd.dwItemSpec then
      begin
//
if LPNMLVCD^.iSubItem = ListViewSubItemSel then
        begin
//
LPNMLVCD^.clrText:=GetSysColor(COLOR_HIGHLIGHTTEXT);

//
LPNMLVCD^.clrTextBk:=GetSysColor(COLOR_HIGHLIGHT);
        end
//
else
        begin
//
LPNMLVCD^.clrText:=0;
//
LPNMLVCD^.clrTextBk:=$d8e9ec;
        end;

//
Result:=CDRF_NEWFONT;

//
Exit;
      end;
    end; 
  end;
end;