2012-11-28 40 views
37

Tôi có một DLL COM có một biểu mẫu. DLL này được tiêu thụ bởi một ứng dụng C#. Tôi đã bật Visual Styles cho ứng dụng C# của mình. Tôi không muốn Visual Styles được áp dụng cho hình thức COM DLL. Nhưng khi tôi chạy ứng dụng của tôi và mẫu COM DLL lanuch, nó có kiểu trực quan được áp dụng cho nó. Làm thế nào tôi sẽ ngăn chặn nó?Tại sao biểu mẫu VB6.0 hiển thị dưới dạng biểu mẫu C#?

Nhiều người đề xuất sử dụng tệp kê khai. Nhưng, bất kỳ biểu hiện nào tôi thấy trên internet, tất cả đều sử dụng các điều khiển chung 6. Cách tạo tệp kê khai sử dụng các điều khiển chung 5.0? Một số cũng đề xuất sử dụng ActivationContext. Nhưng, điều đó cũng cần biểu hiện chính xác sử dụng các điều khiển chung 5.0 phải không?

Vui lòng đề xuất điều gì đó.

+10

Bạn sẽ phải khỉ với CreateActCtx trong mã vb6 của bạn. Điều này là rất khó để có được quyền. Có phong cách không nhất quán trong giao diện người dùng của bạn có ý nghĩa rất ít. –

+10

Tệp kê khai là theo quy trình. Bạn sẽ cần phải sử dụng một máy chủ COM quá trình cho cửa sổ của bạn. Lưu ý rằng có một số phương thức cho một số DLL sử dụng một tệp kê khai khác nhau, điều này yêu cầu hỗ trợ các ứng dụng máy chủ lưu trữ. – Deanna

+1

Bạn có thể thử làm cho các biểu mẫu từ VB6 DLL làm việc với các điều khiển chung 6 biểu hiện. [Bài viết này của VBAccelerator] (http://www.vbaccelerator.com/home/VB/Code/Libraries/XP_Visual_Styles/Using_XP_Visual_Styles_in_VB/article.asp) là một điểm khởi đầu tốt – MarkJ

Trả lời

3

Nếu bạn có một cửa sổ xử lý đối với hình thức (từ DLL COM) sau đó bạn có thể tắt visual styles vào mẫu rằng việc sử dụng các API Win32:

SetWindowTheme(hwnd, "", ""); 

Tôi tin rằng bạn sẽ phải P/Invoke API. Dưới đây là định nghĩa:

[DllImport("uxtheme.dll", ExactSpelling=true, CharSet=CharSet.Unicode)] 
public static extern int SetWindowTheme(
    IntPtr hWnd, 
    String pszSubAppName, 
    String pszSubIdList); 
Các vấn đề liên quan