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 BitBlt(DC, MBorderWidth, MBorderHeight, MTitlebarBitmap.Width, MTitlebarBitmap.Height, MTitlebarBitmap.Canvas.Handle, 0, 0, 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
noidic 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!