Frage

Ich möchte mit Transparenz ein Fenster mit oberster Ebene (dh nicht WS_Child) erstellen. Ich möchte jedoch nicht, dass es sich um eine einfache Maske handelt, bei der ein bestimmtes Pixel entweder vollständig transparent oder vollständig undurchsichtig ist. Und ich möchte nicht, dass es so ist, dass das gesamte Fenster einen Alpha -Level hat. Vielmehr möchte ich, dass das Fenster im Wesentlichen völlig transparent ist, mit einer Bitmap, die mit einem Alpha -Kanal davon gezogen wird, so dass die Bitmap mit den Fenstern, die dahinter stehen, einmischt. Bild, beispielsweise ein Sunburst, bei dem sich das eigene Alpha eines Bildes von undurchsichtig bis vollständig nach außen aus dem Zentrum ausmischt.

Ich habe zwei Methoden gefunden, die sich dem nähern, was ich tun möchte, aber nicht ganz. Mit Regionen kann ich einen Abschnitt ausschneiden, der vollständig transparent gezogen wird. Mit geschichteten Fenstern kann ich auch etwas Ähnliches tun (oder sogar das gesamte Fenster leicht transparent machen, aber das ist überhaupt nicht das, was ich überhaupt möchte). Ich habe mit anderen Stilen wie WS_EX_TRALPARENT und WS_EX_CONPOSOT gesucht, aber ohne Erfolg.

Ich kann diese Art von Effekt in Kinderfenstern gut funktionieren, da sie mit ihren übergeordneten Fenstern in der Region ihrer Eltern mischen. Wenn es für Fenster auf höchstem Niveau ähnlich funktioniert, entgeht mir mir weiter.

Ich weiß, dass dies getan werden kann, wie die Leute mir versichert haben, dass sie es in anderen Programmen gesehen haben. Ich habe das Gefühl, dass ich hier einfach nichts Einfaches über das Malen von Fenstern nicht vollständig verstehe.

War es hilfreich?

Lösung

Schichtfenster (WS_EX_LAYERED) sollte den Job erledigen und bedenken, dass Sie verwenden müssen UpdateLayeredWindow() und ein etwas ungewöhnliches Bitmap-Format (32-Bit-Alpha), um pro-Pixel-Alpha-Werte (Alpha-Werte) anzugeben (WerteSetLayeredWindowAttributes() Ermöglicht Ihnen nur einen einzelnen Alpha -Wert für das gesamte Fenster oder die Farbschlüssel).

Sie sagen, Sie haben es bereits versucht - welche Probleme haben Sie aufgetreten?

Andere Tipps

Der einzige Weg, den ich kenne, um das Pixel-Alpha in ein Fenster zu bekommen, ist UpdateLayeredWindow ().
Schauen Sie sich diesen MSDN -Link an: http://msdn.microsoft.com/en-us/library/ms997507.aspx

Beachten Sie, dass die Anwendung bei Verwendung von UpdateLayeredWindow nicht auf WM_Paint oder andere Malnachrichten antworten muss Bildschirm. UpdatElayeredWindow ist ziemlich leistungsfähig, erfordert jedoch häufig die Art und Weise, wie eine vorhandene Win32 -Anwendung zieht.

Ich wette, das sind die Probleme, die Sie hatten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top