繪制delphi窗體的標題欄
按照設計,Delphi窗體的“標題”屬性是由Windows負責繪制,標題欄在系統菜單旁邊。
如果你不想改變窗體的標題屬性又想在窗體的標題欄添加一些自己的內容,你需要處理一個特殊的Windows消息:WM_NCPAINT。
當需要重繪它窗體框架時,一個WM_NCPAINT消息發送到窗口,。應用程序可以截獲該消息,繪制自己的定制的窗口框架。
注意,當窗體激活或停用時,您還需要處理WM_NCACTIVATE。如果不處理WM_NCACTIVATE消息,當窗體失去焦點時,自定義標題文字會消失。
TCustomCaptionForm = class(TForm)
private
procedure WMNCPaint(var Msg: TWMNCPaint) ; message WM_NCPAINT;
procedure WMNCACTIVATE(var Msg: TWMNCActivate) ; message WM_NCACTIVATE;
procedure DrawCaptionText() ;
end;
...
implementation
procedure TCustomCaptionForm .DrawCaptionText;
const
captionText = 'delphi.about.com';
var
canvas: TCanvas;
begin
canvas := TCanvas.Create;
try
canvas.Handle := GetWindowDC(Self.Handle) ;
with canvas do
begin
Brush.Style := bsClear;
Font.Color := clMaroon;
TextOut(Self.Width - 110, 6, captionText) ;
end;
finally
ReleaseDC(Self.Handle, canvas.Handle) ;
canvas.Free;
end;
end;
procedure TCustomCaptionForm.WMNCACTIVATE(var Msg: TWMNCActivate) ;
begin
inherited;
DrawCaptionText;
end;
procedure TCustomCaptionForm.WMNCPaint(var Msg: TWMNCPaint) ;
begin
inherited;
DrawCaptionText;
end;