Frage

Ich entwickle ein ActiveX-Steuerelement, das (in diesen Tagen) verwendet wird, meist in WinForms-Anwendungen.

Das ActiveX-Steuerelement hat eine ‚Eigenschaftenseite‘ Dialog, der programmatisch die ShowPropertyPages Methode auf dem AxHost-Klasse angezeigt werden kann. Dies ist die benutzerdefinierte Benutzeroberfläche, die in Visual Studio gebracht werden können, eine Steuereigenschaft zu bearbeiten.

Diese Eigenschaftsseite Dialog enthält eine ListBox Steuerelement, das eine Abbildungsliste mit Symbolen anzuzeigen nächsten Artikel aufzulisten. Diese Symbole sind 32-Bit-Alpha-gemischt Bitmaps. Damit diese korrekt angezeigt werden, Version 6.0 oder oberhalb von COMCTL32.DLL verwendet werden.

Leider, wenn ich meine WinForms-Anwendung laufen, es lädt und verwendet COMCTL32.DLL Version 5.xxx . Als Ergebnis, wenn die Eigenschaftsseite Dialogfeld angezeigt wird die Icons schlecht aussieht (die halbtransparente Bereiche in Schwarz gezeichnet werden).

Meine Frage ist: Gibt es eine Möglichkeit, sicher machen COMCTL32.dll Version 6.0+ aus dem ActiveX-Steuerelement der Eigenschaftenseite UI, unabhängig davon, was der Prozess unter Verwendung zu benutzen? Oder kann ich den Host-Prozess erzwingen Version 6.0 zu benutzen? (Ich glaube nicht, weil ich den Host-Prozess denke vielleicht schon COMCTL32.DLL in den Speicher geladen haben, bevor irgendeine der Code in dem ActiveX-Steuerelement.

dieser Webseite einige Szenarien deckt für die Verwendung von COMCTL32 6.0 , aber nicht die Situation, die ich bin in.

War es hilfreich?

Lösung

Das Original MSDN-Artikel verwirrte mich, weil es auf einer Reihe von spezifischen Szenarien fokussiert, von denen keine Mine abgestimmt. In der Tat ist es die zugrunde liegende Technologie spricht über Werke im Allgemeinen.

Mit dem Hinzufügen einer 'offensichtliche' XML-Datei Ressource des ActiveX-DLL, kann ich auf das Signal Side-by-Side-System, das ich will, dass DLL COMCTL32.DLL 6.x verwenden Diese Version wird dann automatisch geladen. Sehr schön.

Das Manifest muss Ressourcentyp RT_MANIFEST , mit einer Ressource-ID von 2 sein.

Hier ist der Beweis für den Erfolg (zwei Versionen derselben DLL in demselben Prozess geladen!): procexp Screenshot zeigt zwei COMCTL32 des loaded in Prozess

(auch die Symbole in der Listbox richtig angezeigt ;) )

Andere Tipps

Wenn Ihre Anwendung ruft Application.EnableVisualStyles () (in der Regel vor dem Aufruf von Application.Run () eine Nachrichtenschleife zu starten), dann Version 6+ der gemeinsamen Kontrollen Bibliothek verwendet werden soll.

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