Gibt es eine Möglichkeit, den Nebeneffekt von "DwmEnableBlurBehindWindow" in VC6.0 zu beheben?

Ich habe ein genaues Problem festgestellt, das im MSDN-Thema erwähnt wurde: DWM Verwischen Sie die Übersicht .

Nachdem DwmEnableBlurBehindWindow aufgerufen wurde, wurde der Client-Bereich zu einem schönen Glas, aber leider wurde auch der gesamte schwarze Text auf den Steuerelementen (BUTTONs, EDITS, STATICs usw.) transparent, genauso wie Thema auf MSDN .

Irgendeine Möglichkeit, das zu beheben?

Meine Entwicklung env ist übrigens VC ++ 6.0, und ich muss mit der DrawThemeTextEx-API leuchtenden Text zeichnen, so dass ich DwmExtendFrameIntoClientArea nicht einfach verwenden kann. Ich muss DwmEnableBlurBehindWindow verwenden, um den Glaseffekt der Client-Region zu aktivieren.

Danke vielmals!

2012/6/19 Aktualisieren: Wenn Sie mit "SetLayeredWindowAttributes" die TRANSPARENTE KEY COLOR eines Fensters in eine nicht-schwarze Farbe ändern, dann kann die Verwendung von "DwmExtendFrameIntoClientArea" das Problem mit dem Beschriftungstext von CONTROLS (BUTTONs, EDITs usw.) im Glasfenster lösen.

Aber auf diese Weise konnte "DrawThemeTextEx" nicht richtig funktionieren. Es sieht so aus, dass DrawThemeTextEx nur RGB (0,0,0) als TRANSPARENT KEY COLOR verwenden kann.

Also, gibt es irgendeine API könnte die TRANSPARENT KEY COLOR, die von "DrawThemeTextEx" innerhalb verwendet?

Mein ultimatives Ziel ist es, etwas leuchtenden Text in ein Glas (Aero) -Fenster ohne die "DwmEnableBlurBehindWindow" -Effekte zu zeichnen, die im MSDN-Thema: DWM Blur Behind Overview, http://msdn.microsoft.com/en-us/library erwähnt wurden /aa969537.aspx. Und wenn es eine andere Möglichkeit gibt, es zu tun, bin ich sehr froh zu hören :)

Und nochmals vielen Dank! :)

0
hinzugefügt bearbeitet
Ansichten: 1
Der Grund, warum ich VC6 erwähnt habe, ist, dass ich DWM-APIs auf eine dynamische Weise verwenden muss. Und die ganze MSDEV ist nicht so einfach zu benutzen wie VS2008 oder später.
hinzugefügt der Autor Jimson, Quelle
Ja, ich habe eine TRANSPARENTE TASTENFARBE gewählt: RGB (200, 201, 202), damit der gesamte Text korrekt auf den STEUERELEMENTEN angezeigt wird. Aber zur gleichen Zeit konnte "DrawThemeTextEx" nicht richtig funktionieren. Und ich bin wirklich erschöpft ..... Mein Ziel ist es, "DrawThemeTextEx" und "DwmExtendFrameIntoClientArea" zur gleichen Zeit gut zu machen. :(
hinzugefügt der Autor Jimson, Quelle
VC6 hat nichts damit zu tun, die allgemeinen Steuerelemente verwenden GDI und GDI unterstützt den Alpha-Kanal nicht ...
hinzugefügt der Autor Anders, Quelle
Das Verwenden eines Farbschlüssels ist nicht der Weg, um IMHO zu gehen, da Sie eine Farbe wählen müssen, die nicht Teil des Themas/VS ist und nicht in irgendwelchen Grafiken/Symbolen verwendet wird, die Sie haben könnten ...
hinzugefügt der Autor Anders, Quelle
und wenn die Textsystemfarbe RGB (200, 201, 202) ist?
hinzugefügt der Autor Anders, Quelle

1 Antworten

Werfen Sie einen Blick auf Painting Titeltitel in MSDN:

Suchen Sie die Zeile HBITMAP hbmOld = (HBITMAP) SelectObject (hdcPaint, hbm); im Beispiel.

Dann füge folgende Zeile hinzu:

// You should have set RGB(200,201,202) as the transparency key
FillRect(hdcPaint,&rcClient,CreateSolidBrush(RGB(200,201,202)));

Obwohl der Effekt nicht perfekt zu sein scheint, löst er das Problem.

Reference: C++ WinAPI Conflict between SetLayeredWindowAttributes and BitBlt

0
hinzugefügt