Wie das Minimum zu glühen. Maximal- und Schließknopf?

9

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,

    
user2365346 15.01.2016, 01:32
quelle

1 Antwort

6

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 an DwmDefWindowProc for übergeben werden   Handhabung. DwmDefWindowProc gibt TRUE zurück, wenn eine Nachricht bearbeitet wird und    FALSE wenn nicht. Wenn die Nachricht nicht von DwmDefWindowProc verarbeitet wird,   Ihre Anwendung sollte die Nachricht selbst behandeln oder die Nachricht weitergeben   auf DefWindowProc .

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 :

%Vor%

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%     
Barmak Shemirani 15.01.2016, 10:21
quelle

Tags und Links