2012-11-28 3 views
37

Ich habe eine COM-DLL, die eine Form hat. Diese DLL wird von einer C# -Anwendung verbraucht. Ich habe Visual Styles für meine C# -Anwendung aktiviert. Ich möchte nicht, dass die Visual Styles für das COM-DLL-Formular angewendet werden. Aber wenn ich das Formular meiner Anwendung und des LANUCH COM DLLs ausführe, werden visuelle Stile darauf angewendet. Wie werde ich das verhindern?Warum VB6.0-Formular als C# -Form angezeigt?

Viele Leute schlagen vor, ein Manifest zu verwenden. Aber, was manifestiert, die ich im Internet sehe, benutzen sie alle allgemeine Kontrollen 6. Wie man ein manifest herstellt, das allgemeine Kontrollen 5.0 verwendet? Einige schlagen auch vor, ActivationContext zu verwenden. Aber das braucht auch korrekte Manifest, die gemeinsame Kontrollen 5.0 richtig nutzt?

Bitte etwas vorschlagen.

+10

Sie müssten mit CreateActCtx in Ihrem vb6-Code Affe. Das ist sehr schwer zu bekommen. Inkonsistente Stile in der Benutzeroberfläche sind wenig sinnvoll. –

+10

Das Manifest ist pro Prozess. Sie müssten für Ihr Fenster einen COM-Host verwenden, der nicht mehr in Bearbeitung ist. Beachten Sie, dass es für einige DLLs Methoden gibt, ein anderes Manifest zu verwenden. Dies erfordert die Unterstützung der Host-Anwendungen. – Deanna

+1

Sie könnten versuchen, die Formulare aus der VB6-DLL mit dem Manifest der allgemeinen Steuerelemente 6 arbeiten zu lassen. [Dieser VBAccelerator-Artikel] (http://www.vbaccelerator.com/home/VB/Code/Libraries/XP_Visual_Styles/Using_XP_Visual_Styles_in_VB/article.asp) ist ein guter Ausgangspunkt – MarkJ

Antwort

3

Wenn Sie ein Fenster-Handle für das Formular (von dem COM-DLL), dann können Sie auf dem Formular visuelle Stile deaktivieren Sie die Win32-API:

SetWindowTheme(hwnd, "", ""); 

Ich glaube, Sie P/Invoke haben werden die API. Hier ist die Definition:

[DllImport("uxtheme.dll", ExactSpelling=true, CharSet=CharSet.Unicode)] 
public static extern int SetWindowTheme(
    IntPtr hWnd, 
    String pszSubAppName, 
    String pszSubIdList);