Это было легко сделать до Windows Aero. Вам просто нужно было прослушать сообщения WM_NCPAINT
и WM_NCACTIVATE
, чтобы нарисовать их в верхней части панели заголовков, и аналогичным образом вы могли использовать другие сообщения WM_NC*
для ответа на щелчки мыши и т. Д., В частности WM_NCHITTEST
, WM_NCLBUTTONDOWN
и WM_NCLBUTTONUP
.
Например, чтобы нарисовать строку в строке заголовка, вам нужно всего лишь сделать
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
protected
procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;
procedure WMNCActivate(var Msg: TWMNCActivate); message WM_NCACTIVATE;
private
procedure DrawOnCaption;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMNCActivate(var Msg: TWMNCActivate);
begin
inherited;
DrawOnCaption;
end;
procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
begin
inherited;
DrawOnCaption;
end;
procedure TForm1.DrawOnCaption;
var
dc: HDC;
begin
dc := GetWindowDC(Handle);
try
TextOut(dc, 20, 2, 'test', 4);
finally
ReleaseDC(Handle, dc);
end;
end;
end.
Теперь, это не работает с включенным Aero. Тем не менее, есть способ рисовать на панели заголовка; Я сделал это, но это намного сложнее. См. эту статью для рабочего примера.