【问题标题】:ListView column shading bugListView 列着色错误
【发布时间】:2014-11-20 16:08:02
【问题描述】:

我想为选定的列添加颜色填充。

我在ListView1CustomDrawItem处理程序中做的绘图项目:

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;

如果我理解正确,我应该在ListView1CustomDraw 处理程序中绘制选定的列:

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();

结果是:

http://i63.fastpic.ru/big/2014/1120/ba/e5b6d30eb9e05bbe3661aed295c28aba.jpg

也可以在视频中看到: http://youtu.be/XGXpWCUtGbU

如您所见,当我将光标移动(不要单击)项目上时,它们会被错误地重绘。但是项目必须绘制在列彩色矩形上。 我该如何解决这个问题?

【问题讨论】:

    标签: c++ listview c++builder c++builder-xe5


    【解决方案1】:

    您还需要处理OnCustomDrawSubItem 事件。 OnCustomDrawItem 事件仅适用于第一列。

    【讨论】:

    • Remy Lebeau,你有在ListView中绘制阴影列的源代码吗?
    • 我不明白你在问什么。而且您已经知道如何绘制项目,您只需要处理OnCustomDrawItem 和OnCustomDrawSubItem 事件。你还在做吗?
    • 我在 OnCustomDrawSubItem 中编写的代码不起作用。永远不会调用此事件。告诉我应该在 OnCustomDrawSubItem 处理程序中写什么?也许你有一个可行的例子?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多