2009-05-18 12 views
0

Wir haben eine IE-Symbolleiste erstellt. Wir zeigen ein Symbol in der Symbolleiste an, indem wir ein statisches Steuerelement verwenden und das Bild darüber halten.Symbol in der Symbolleiste ist nicht transparent

Da dieses statische Steuerelement nicht transparent ist, zeigt dieses Symbol eine Hintergrundfarbe an (dies ist die Standardfarbe der allgemeinen Windows-Steuerelemente).

ist es möglich, die statische Steuerung unabhängig von Browserthemen transparent zu machen.

Projekt wird in ATL C++ entwickelt.

Wir haben versucht, WS_EX_TRANSPARENT als Eigenschaft der statischen Kontrolle und wenn wir versucht, null_brush in OnCtrlColorStatic-Ereignis zurückgegeben, aber immer noch Problem ist nicht gelöst.

Antwort

1

Nun, ich weiß nicht viel über ATL, aber in Standard-Windows-API würden Sie LoadImage Funktion verwenden, um das Bild zu laden. Hier sind einige Tipps für Bilder mit transparenten Bereichen (transparenten Hintergrund) bekommen:

  1. Das Bild muss eine „Schlüsselfarbe“ hat, und jedes Pixel dieser Farbe im Bild wird bei Anzeigezeit transparent. Diese Farbe muss die Farbe des ersten Pixels sein, das sich oben links im Bild befindet. Beim Aufrufen von LoadImage mit bestimmten Flags (siehe unten) lädt Windows das Bild, liest die oberste linke Pixelfarbe und erstellt alle Pixel im Bild, die dieselbe Farbe haben wie die erste, die ausgeblendet werden soll (sie werden transparent gemacht).

  2. Wenn Sie LoadImage aufrufen, muss der dritte Parameter IMAGE_BITMAP ODER IMAGE_ICON lauten. Dies hängt davon ab, welche GDI-Funktionen Sie zum Anzeigen des Bilds verwenden (Symbolfunktionen oder Bitmapfunktionen). Auch das letzte Flag muss LR_LOADTRANSPARENT enthalten, um die Farbschlüssel richtig zu verwenden.

  3. Nachdem Sie das Bild wie oben beschrieben dynamisch geladen haben, verfügen Sie über ein Handle für diese Ressource. Sie können den Anzeigekontext Ihres statischen Steuerelements mithilfe von GDI-Standardfunktionen wie DrawIconEx dynamisch zeichnen, wenn Sie das IMAGE_ICON-Flag geladen haben.

Hoffe, es hilft.

+1

Jetzt habe ich gesehen, dass die Frage sehr alt ist, aber anderen Menschen helfen könnte, die Hilfe im Web suchen. –

Verwandte Themen