2012-11-28 6 views
37

私はフォームを持つCOM DLLを持っています。このDLLは、C#アプリケーションによって消費されます。私はC#アプリケーションのビジュアルスタイルを有効にしました。ビジュアルスタイルをCOM DLLのフォームに適用したくありません。しかし、私のアプリケーションとlanuch COM DLLのフォームを実行すると、ビジュアルスタイルが適用されます。どうすればそれを防ぐことができますか?VB6.0フォームがC#フォームとして表示されるのはなぜですか?

多くの人がマニフェストを使用することをおすすめします。しかし、私がインターネット上で見るどのようなマニフェストでも、共通コントロールを使います。6.共通コントロール5.0を使用するマニフェストを作成するにはどうすればいいですか? ActivationContextの使用を推奨する人もいます。しかし、それも共通コントロール5.0を使用する正しいマニフェストが必要ですか?

何かお勧めします。

+10

vb6コードでCreateActCtxを使用する必要があります。これは正しいことが非常に難しいです。あなたのUIに矛盾したスタイルを持つことはほとんど意味がありません。 –

+10

マニフェストはプロセスごとです。あなたのウィンドウにはアウトプロセスCOMホストを使用する必要があります。いくつかのDLLが異なるマニフェストを使用する方法があることに注意してください。これには、ホストアプリケーションのサポートが必要です。 – Deanna

+1

VB6 DLLのフォームを一般的なコントロール6マニフェストで動作させることができます。 [このVBAcceleratorの記事](http://www.vbaccelerator.com/home/VB/Code/Libraries/XP_Visual_Styles/Using_XP_Visual_Styles_in_VB/article.asp)は良い出発点です – MarkJ

答えて

3

あなたは(COMのDLLからの)フォームのウィンドウハンドルを持っているなら、あなたは、Win32 APIを使用してそのフォーム上の視覚的なスタイルを無効にすることができます

SetWindowTheme(hwnd, "", ""); 

私はあなたがP /呼び出す必要があります信じていますAPI。定義は次のとおりです。

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