2012-11-28 45 views
37

मेरे पास एक COM DLL है जिसका एक फॉर्म है। यह डीएलएल एक सी # आवेदन से खपत है। मैंने अपने सी # एप्लिकेशन के लिए विजुअल स्टाइल सक्षम किए हैं। मैं नहीं चाहता कि विजुअल शैलियां COM DLL के फॉर्म के लिए लागू हों। लेकिन जब मैं अपना आवेदन चलाता हूं और COM DLL के रूप में काम करता हूं, तो इसमें दृश्य शैली लागू होती है। मैं इसे कैसे रोकूं?वीबी 6.0 फॉर्म सी # फॉर्म के रूप में क्यों प्रदर्शित होता है?

कई लोग एक मैनिफेस्ट का उपयोग करने का सुझाव देते हैं। लेकिन, जो कुछ भी मैं इंटरनेट पर देखता हूं, वे सभी सामान्य नियंत्रण 6 का उपयोग करते हैं। सामान्य नियंत्रण 5.0 का उपयोग करने वाले एक मेनिफेस्ट को कैसे बनाया जाए? कुछ सक्रियण कॉन्टेक्स्ट का उपयोग करने का भी सुझाव देते हैं। लेकिन, उसे भी सही मैनिफेस्ट की आवश्यकता है जो सामान्य नियंत्रण 5.0 का उपयोग करता है?

कृपया कुछ सुझाव दें।

SetWindowTheme(hwnd, "", ""); 

मेरा मानना ​​है कि आप पी/आह्वान करने के लिए होगा:

+10

आपको अपने vb6 कोड में CreateActCtx के साथ बंदर करना होगा। सही होने के लिए यह बहुत मुश्किल है। आपके यूआई में असंगत शैलियों को कम समझ में आता है। –

+10

मेनिफेस्ट प्रति प्रक्रिया है। आपको अपनी विंडो के लिए कॉम होस्ट से बाहर प्रक्रिया का उपयोग करना होगा। ध्यान दें कि कुछ डीएलएल के लिए एक अलग मैनिफेस्ट का उपयोग करने के तरीके हैं, इसके लिए होस्ट अनुप्रयोगों के समर्थन की आवश्यकता है। – Deanna

+1

आप सामान्य नियंत्रण 6 मेनिफेस्ट के साथ वीबी 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 एपीआई का उपयोग कर पर निष्क्रिय कर सकते हैं एपीआई यहां परिभाषा है:

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