Wie "neue" und "alte" Komponenten gleichzeitig nutzen ??
-
Hallo zusammen,
ich habe in meinem MFC ein:
//XP-Style #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")stehen, welches mir die neuen XP Style Komponenten einbindet.
Blöd nur, das Tab-Controls enorme Bugs haben und seitliche Tab's dadurch keine
Benamsung mehr anzeigen sondern leer bleiben
Also würde ich nun gerne meinen XP Style weiter behalten und NUR für dieses TAB Control
einen Wrapper basteln, der mir die alten Styles benutzt.
Auch würde ich das gerne für CStatics Picture Controls machen, welche im neuen
Style fürchterlich Probleme beim schnellen Bildaufbau haben. Ich komme da nur mit
nem MEMDC Wrapper auf akzeptable Ergebnisse.Nur wie ? Wie kan man ein bestimtes Control auf alten Style setzen ?
Wie würde obiger Pragma für den alten Style aussehen ? Könnte man den dann in einer Wrapper Klasse verwenden ?Grüße
thenoname
-
Das ist nicht möglich. Es kann immer nur eine COMCTL32 DLL in einem Prozess existieren. Das problem ist einfach schon, dass die Klassen ja unter dem selben Klassenamen registriert werden. Wie sollte man nun zwischen alter und neuer Klasse unterscheiden, weneide Klassen als globale Klassen registriert sind und beide den selben Namen haben...
-
UnregisterClass
-
Das geht irgendwie mit dem Activation-Context...
Siehe:
Activation Context Reference
http://msdn2.microsoft.com/en-us/library/aa374166(VS.85).aspx
http://msdn2.microsoft.com/en-us/library/aa376620(VS.85).aspxAber wie genau, kann ich Dir gerade nicht sagen...
-
Jochen Kalmbach schrieb:
Das geht irgendwie mit dem Activation-Context...
Siehe:
Activation Context Reference
http://msdn2.microsoft.com/en-us/library/aa374166(VS.85).aspx
http://msdn2.microsoft.com/en-us/library/aa376620(VS.85).aspxAber wie genau, kann ich Dir gerade nicht sagen...
Ich dachte, dfamit kann ich nur pauschal kontrollieren, was geladen wird. Aber das Problem, dass entsteht ist ja, dass man einen Klassennamen hat. Die COMCTL32 lädt nun beide Klassen als globale Klasse in den Namensraum der registrierten Klassen. Unterschieden werden Sie anhand des Modulehandles.
Wenn man also die normale COMCTL32 auch per LoadLibrary in den Prozess lädt müssten zumindestens auch die alten Klassen registriert werden.
Nur welche Klasse nimmt er dan wann?
OK! Was funktionieren kann (auch ohne Activation Kontext) ist, dass man HINSTANCE der normalen COMCTL32 angibt als HINSTANCE für CreateWindow.
D.h. wenn man es genau nimmt, gibt es einen Weg.
Es kann aber sein, dass druch nachträgliches Laden der COMCTL32 Klassen die XP Klassen überlagert werden...Käme auf einen Versuch an...
Das Problem bei Dialog Templates und PropertySheets ist jedoch, dass man hier auf CreateWindow IMHO keinen Einfluss hat und dort das HINSTANCE des Prozesses angewendet wird, aus dem eben der Dialog erzeugt wird.
Alles ins unreine geschrieben. Vielleicht geht es noch ganz anders...