0

選択した列に塗りつぶしを追加したい。

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

ご覧のとおり、項目の上にカーソルを移動すると (クリックしないでください)、項目が正しく再描画されません。ただし、アイテムは列の色付きの長方形の上に描画する必要があります。どうすればこれを修正できますか?

4

1 に答える 1

0

OnCustomDrawSubItemイベントも処理する必要があります。イベントは最初のOnCustomDrawItem列にのみ適用されます。

于 2014-11-21T23:53:35.730 に答える