用Delphi自绘标题时.
碰到这样的问题:
按下鼠标时,标题又变成灰色.
var
  dd: thandle;
  f: Tcanvas;
  bit: TBitmap;
begin
  bit := TBitmap.Create;
  bit.LoadFromFile('bk.bmp');
  f := tcanvas.Create;
  // dd := findwindowex(Rzlistview1.Handle, 0, 'SysHeader32', '');
  dd := CommCtrl.ListView_GetHeader(RzListView1.Handle);
  f.Handle := getwindowdc(dd);
  f.Font.Color := clred;
  f.TextOut(1, 1, 'hello');
  //f.Draw(0, 0, bit);
  f.Free;
end;
procedure TForm1.RzListView1AdvancedCustomDraw(Sender: TCustomListView;
  const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean);
beginend;procedure TForm1.RzListView1AdvancedCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
  var DefaultDraw: Boolean);
beginend;
procedure TForm1.RzListView1AdvancedCustomDrawSubItem(
  Sender: TCustomListView; Item: TListItem; SubItem: Integer;
  State: TCustomDrawState; Stage: TCustomDrawStage;
  var DefaultDraw: Boolean);
beginend;procedure TForm1.RzListView1CustomDraw(Sender: TCustomListView;
  const ARect: TRect; var DefaultDraw: Boolean);
beginend;procedure TForm1.RzListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
beginend;procedure TForm1.RzListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
beginend;
谁能解释一下,这几个函数在什么时候执行,有什么区别?
感激不尽.

解决方案 »

  1.   

    1.ondrawitem在ownerdraw=true时触发,其余随时触发。
    2.ondrawitem,只影响列表视图的样式,有几项影响几项
    3.oncustomdraw,针对整个背景,没有项的地方也受影响,可以设定ownerdraw值看一下效果
    4.onCustomDrawItem 解决单个项的显示
    5.oncustomXXX 和onAdvancedCustomXXX功能差不多,onAdvancedCustomXXX绘制前后触发多次,灵活性更强