C++ ListView列着色错误
我想为所选列添加颜色填充 我在ListView1CustomDrawItem处理程序中执行的图形项: 如果理解正确,请在ListView1CustomDraw处理程序中绘制所选列: 结果是: 也可以在视频中看到: 正如您所看到的,当我移动时,不要在项目上单击光标,它们被错误地重新绘制。但项目必须绘制在彩色矩形列上。C++ ListView列着色错误,c++,listview,c++builder,c++builder-xe5,C++,Listview,C++builder,C++builder Xe5,我想为所选列添加颜色填充 我在ListView1CustomDrawItem处理程序中执行的图形项: 如果理解正确,请在ListView1CustomDraw处理程序中绘制所选列: 结果是: 也可以在视频中看到: 正如您所看到的,当我移动时,不要在项目上单击光标,它们被错误地重新绘制。但项目必须绘制在彩色矩形列上。 如何修复此问题?您还需要处理OnCustomDrawSubItem事件。OnCustomDrawItem事件仅适用于第一列。Remy Lebeau,您有在ListView中绘制着色
如何修复此问题?您还需要处理OnCustomDrawSubItem事件。OnCustomDrawItem事件仅适用于第一列。Remy Lebeau,您有在ListView中绘制着色列的源代码吗?我不明白您的要求。您已经知道如何绘制项目,只需要处理OnCustomDrawItem和OnCustomDrawSubItem事件。你还在做吗?我在OnCustomDraw子项中编写的代码不起作用。永远不会调用此事件。告诉我应该在OnCustomDrawSubItem处理程序中编写什么?也许你有一个有效的例子?
Sender->Canvas->Brush->Color = RGB(200, 200, 255);
if(Item->Selected)
{
Sender->Canvas->Brush->Color = (Sender->Focused() ? clBlue : clRed);
}
Sender->Canvas->Lock();
Sender->Canvas->FillRect(Item->DisplayRect(drBounds));
Sender->Canvas->TextOut(Item->DisplayRect(drLabel).Left, Item->DisplayRect(drLabel).Top + 1, Item->Caption);
Sender->Canvas->Unlock();
DefaultDraw = false;
TRect rect;
rect = ARect;
rect.Right = Sender->Column[0]->Width;
Sender->Canvas->Brush->Color = RGB(245, 245, 245);
Sender->Canvas->Lock();
Sender->Canvas->FillRect(rect);
Sender->Canvas->Unlock();