2012-11-28 40 views
37

我有一個COM DLL,它有一個窗體。該DLL由C#應用程序使用。我爲我的C#應用​​程序啓用了視覺樣式。我不希望將視覺樣式應用於COM DLL的形式。但是,當我運行我的應用程序和Lanuch COM DLL的窗體時,它會應用它的視覺樣式。我將如何防止它?爲什麼VB6.0窗體顯示爲C#窗體?

許多人建議使用清單。但是,無論我在互聯網上看到什麼樣的清單,它們都使用通用控件6.如何創建使用通用控件5.0的清單?有些人還建議使用ActivationContext。但是,這也需要使用通用控件5.0的正確清單嗎?

請提出建議。

SetWindowTheme(hwnd, "", ""); 

我相信你必須的P/Invoke:

+10

你將不得不在你的vb6代碼中使用CreateActCtx。這很難得到正確的答案。在你的用戶界面中有不一致的風格是沒有意義的。 –

+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該表格上禁用視覺樣式API。這裏的定義:

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