2012-11-28 11 views
37

Mam COM DLL, który ma formularz. Ta biblioteka DLL jest używana przez aplikację C#. Włączyłem Visual Style dla mojej aplikacji C#. Nie chcę, aby style wizualne były stosowane do formularza COM DLL. Ale kiedy uruchamiam moją aplikację i bibliotekę internetową DLL, ma ona zastosowane style wizualne. Jak mam temu zapobiec?Dlaczego formularz VB6.0 jest wyświetlany jako formularz C#?

Wiele osób sugeruje używanie manifestu. Ale, niezależnie od manifestów, które widzę w Internecie, wszystkie używają wspólnych mechanizmów kontrolnych. 6. Jak stworzyć manifest, który korzysta ze wspólnych kontrolek 5.0? Niektórzy sugerują również użycie ActivationContext. Ale to też wymaga poprawnego manifestu, który używa wspólnych kontroli 5.0, prawda?

Proszę zasugerować coś.

+10

Będziesz musiał małpować z CreateActCtx w swoim kodzie vb6. Bardzo trudno jest to naprawić. Brak niespójnych stylów w twoim interfejsie nie ma większego sensu. –

+10

Manifest jest za proces. Musisz użyć hosta COM poza procesem dla twojego okna. Zauważ, że niektóre biblioteki DLL używają różnych manifestów, co wymaga obsługi aplikacji hosta. – Deanna

+1

Możesz spróbować uczynić formularze z biblioteki DLL VB6 z manifestem wspólnej kontroli 6. [Ten artykuł VBAccelerator] (http://www.vbaccelerator.com/home/VB/Code/Libraries/XP_Visual_Styles/Using_XP_Visual_Styles_in_VB/article.asp) to dobry punkt wyjścia – MarkJ

Odpowiedz

3

Jeśli masz uchwyt okna dla postaci (od DLL COM), a następnie można wyłączyć style wizualne w tej formie przy użyciu API Win32:

SetWindowTheme(hwnd, "", ""); 

wierzę musisz P/Invoke API. Oto definicja:

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