Ich habe die Anleitung unten ausgeführt, um einen benutzerdefinierten Aero-Frame mithilfe der DWM-API zu erstellen.
Benutzerdefinierter Fensterrahmen mit DWM
Meine Arbeit:
%Vor%Ergebnis:
Ich habe die Tasten Minimum, Maximum und Schließen gefunden, die nicht leuchten, wenn ich die Maus auf diese Tasten bewege.
Allgemeine Situation:
Wie behebt man dieses Problem?
Beste Grüße,
DwmDefWindowProc
ist erforderlich, um Beschriftungsschaltflächen zu verarbeiten. Von msdn:
Beim Testen von Untertitel-Schaltflächen liefert DWM
DwmDefWindowProc
Funktion. Um richtig zu treffen, testen Sie die Beschriftungsschaltflächen im benutzerdefinierten Rahmen Szenarien sollten Nachrichten zuerst anDwmDefWindowProc
for übergeben werden Handhabung.DwmDefWindowProc
gibtTRUE
zurück, wenn eine Nachricht bearbeitet wird undFALSE
wenn nicht. Wenn die Nachricht nicht vonDwmDefWindowProc
verarbeitet wird, Ihre Anwendung sollte die Nachricht selbst behandeln oder die Nachricht weitergeben aufDefWindowProc
.
In MFC kann es wie folgt funktionieren:
%Vor% Ich habe einen Fix mit GetForegroundWindow()
hinzugefügt, weil die Funktion HitTestNCA
aus dem MSDN-Beispiel falsch ist und nicht HTCLIENT
zurückgibt, wenn dies der Fall ist. Wenn also ein anderes Fenster den Fokus hat, wird es bei einem Mausklick im Client-Bereich nicht umschalten.
Außerdem gibt es ein Leck in OnNcPaint
:
Immer wenn GetWindowDC()
aufgerufen wird, sollte ReleaseDC
folgen. Oder verwenden Sie einfach CWindowDC
, das automatische Bereinigung hat. Sie müssen OnNcPaint
nicht wirklich überschreiben, da der Rahmen auf "Client-Bereich" erweitert wurde.
Hier ist ein vollständiges Beispiel:
%Vor%