Entwickler-Ecke

Windows API - [Win32-API, WinXP] Titelleiste ersetzen


noidic - Fr 27.07.07 11:02
Titel: [Win32-API, WinXP] Titelleiste ersetzen
Mahlzeit,

in unserem Programm haben wir die Fenstertitel durch eigene ersetzt. Dies geschieht über eine Decorator-Komponente über den Form-DC und Bitblt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  DC := GetWindowDC(FParentForm.Handle);
  try
    // Draw titlebar
    BitBlt(DC, MBorderWidth, MBorderHeight,
           MTitlebarBitmap.Width, MTitlebarBitmap.Height,
           MTitlebarBitmap.Canvas.Handle, 00, SRCCOPY);


Unter Windows 2000 klappt das wunderbar. Unter XP eigentlich auch, allerdings passiert es bei einigen Fenstern oft, bei einigen garnicht, dass trotzdem die Standard-Titelleiste gezeichnet wird. Fährt man mit der Maus über die Titelleiste, flackern beide Darstellungsarten hin und her.

Die Preisfrage ist nun, wie stell ich das ab? Ich würde gerne immer unsere Titelleiste gezeichnet haben und nach Möglichkeit auch weiterhin die Decorator-Komponente dafür nutzen, um nicht Unmengen von Forms umbauen zu müssen.

Besten Dank

noidic


gdvLive - Do 18.10.07 13:34

*schieb*
Kannst du bitte mal mehr von deinem Code schicken, um die MTitlebar nachvollziehen können? Bzw. die Lösung, wenn du schon eine hast?


noidic - Do 18.10.07 16:22

Was willst du genau wissen? hier z.B. das setzen der Bitmapgröße:


Delphi-Quelltext
1:
2:
    MTitlebarBitmap.Height := clientRect.Top - MBorderHeight;
    MTitlebarBitmap.Width  := windowRect.Right - windowRect.Left - MBorderWidth * 2;


Ich bin leider nciht sonderlich fit in der Thematik, kenne also die kritischen Punkte nicht. Den ganzen Code kann ich auch nicht posten, da es sich um kein Privatprojekt handelt.


BenBE - So 21.10.07 18:59

Windows sendet zum Zeichnen von Non-Client-Elementen (der Titelleiste, dem Rahmen, ...) eine einige WM_NC*-Nachrichten, darunter auch WM_NCPAINT ... Diese abfangen und das Zeichnen der Kompo dort erledigen.


Bernhard Geyer - So 21.10.07 23:13
Titel: Re: [Win32-API, WinXP] Titelleiste ersetzen
user profile iconnoidic hat folgendes geschrieben:
Unter Windows 2000 klappt das wunderbar. Unter XP eigentlich auch, allerdings passiert es bei einigen Fenstern oft, bei einigen garnicht, dass trotzdem die Standard-Titelleiste gezeichnet wird. Fährt man mit der Maus über die Titelleiste, flackern beide Darstellungsarten hin und her.

Dann vermute ich mal das unter Vista gar nix mehr passt. Haben auch kompos bei denen wir die Titelzeile ersetzen. Unter Vista gibt's mit Aero-Look Probleme-


noidic - Mo 22.10.07 08:29

Vista ist für uns noch lange kein Thema, daher mache ich mir dahingehend erstmal keine Sorgen :)

@BenBE: merci, ich werd das mal ausprobieren und Feedback geben.


noidic - Mo 22.10.07 08:41

Die diversen NC-Messages hat der Kollege damals bereits abgefangen und darin die DrawTitleBar-Funktion (s.o.) aufgerufen, das scheints also leider nicht zu sein.