|
void __fastcall TForm1::statusListViewCustomDrawSubItem(TCustomListView *Sender,
TListItem *Item, int SubItem, TCustomDrawState State,
bool &DefaultDraw)
{
DefaultDraw = SubItem != 6;
if(SubItem == 6)
{
//Item 이 있는 한 줄 전체의 영역을 읽어옵니다.
TRect rt = Item->DisplayRect(drBounds);
TListColumn* col;
//해당 subitem 앞부분의 모든 칼럼의 크기를 rt.left 에 더해주고
//뒷부분의 모든 칼럼의 크기를 rt.right 에서 빼주면
//그림을 그리고자 하는 subitem 의 영역이 나옵니다.
for(int i = 0; i < statusListView->Columns->Count; i++)
{
col = statusListView->Column[i];
//
if(i < SubItem) rt.left += col->Width;
if(i > SubItem) rt.right -= col->Width;
}
//아래칸과 구별하기 위하여 rt.bottom에서 1을 빼서 한칸 띄어줍니다.
rt.bottom--;
TCanvas* c = statusListView->Canvas;
c->Brush->Color = clBlue;
c->FillRect(rt);
}
}
Julien 님이 쓰신 글 :
: TStringGrid 보면 DrawCell 이 있어서 특정 셀에 그림을 그릴 수 있잖아요.
: TListView 를 vsReport 로 해서 TStringGrid 와 같은 형태로 만든 다음
: SubItems 들에서 모두 기본으로 글자가 나오게 하고 특정 셀은 직접 그림을 그리고 싶습니다.
: 어떻게 하면 되는 지 ...
: 검색을 해 보니까 한 줄 전체의 색깔을 바꾸거나 하는 건 있지만 특정 셀에 대한 건 찾기가 어렵네요.
:
: void __fastcall TForm1::ListView1CustomDrawSubItem(
: TCustomListView *Sender, TListItem *Item, int SubItem,
: TCustomDrawState State, bool &DefaultDraw)
: {
: DefaultDraw = SubItem != 6;
: if(SubItem == 6)
: {
: TRect rt = Item->DisplayRect(drBounds);
: ListView1->Canvas->Rectangle(rt);
: }
: }
:
: 이렇게 하니까 한 줄 전체에 사각형이 그려집니다. SubItem 이 6 인 지점의 한 셀만 사각형을 그리고 싶습니다.
|