2010-10-15 12 views
7

क्या विजुअल स्टूडियो 2010 अर्द्ध पारदर्शी में फ़्लोटिंग विंडो बनाना संभव है? मैं एक संपादक विंडो तैरने और उस पर अल्फा स्तर को कम करने में सक्षम होना चाहता हूं। क्या यह कार्यक्षमता एक एक्सटेंशन के साथ बनाई जा सकती है जो स्टॉक संपादक विंडो को संशोधित करती है?विजुअल स्टूडियो 2010 - अर्ध-पारदर्शी फ़्लोटिंग विंडोज

यदि कोई विस्तार नहीं है, तो क्या सभ्य तृतीय पक्ष अनुप्रयोग हैं जो विजुअल स्टूडियो 2010 में विशिष्ट बाल विंडो के गुणों को संशोधित करने में सक्षम होंगे?

उत्तर

0

क्या आपने Visual Studio Color Theme Editor चेक आउट किया है? यदि ऐसा नहीं करता है जो आपको चाहिए तो आप लेखक से फीचर का अनुरोध कर सकते हैं।

+1

मैंने इस एक्सटेंशन का उपयोग किया है और ऐसा लगता है कि मैं जो कुछ कह सकता हूं उससे पारदर्शिता जैसा कुछ भी प्रस्तुत नहीं करता है। –

5

मुख्य समस्या यह है कि यह टूल विंडो पर निर्भर करता है, क्योंकि विजुअल स्टूडियो वास्तव में उपकरण विंडो को वास्तव में प्रस्तुत करने के बारे में बहुत कुछ नहीं जरूरी है।

यदि टूल विंडो में एचएनडब्ल्यूडी खेलने के लिए है, तो आप SetLayeredWindowAttributes फ़ंक्शन का उपयोग करके पारदर्शिता सेट कर सकते हैं। यदि उपकरण विंडो WPF है, तो आप अन्य चाल का उपयोग कर सकते हैं।

अब समस्या कुछ उपयोगी पर पकड़ प्राप्त करना है ... बस विजुअल स्टूडियो 2010 पर SPY ++ लॉन्च करें और आप देखेंगे कि एचडब्ल्यूएनडी के आसपास कई दिखाई नहीं दे रहे हैं। कुछ पैकेज अप्रबंधित कोड का उपयोग करते हैं, कुछ संकुल .NET + Winforms का उपयोग करते हैं, और अधिक से अधिक, हाल के पैकेज .NET + WPF का उपयोग करते हैं।

UISpy (एक और जासूस उपकरण, लेकिन UI Automation के आधार पर) सभी टूल विण्डो देखता है, लेकिन यह किसी भी मूल निवासी खिड़की हैंडल (मानक संपत्ति है कि यूआई स्वचालन पढ़ सकते हैं में से एक), जो अच्छी खबर नहीं है नहीं दिखाती है।

विजुअल स्टूडियो मेजबान विंडो बनाने के लिए IVsWindowPane इंटरफ़ेस और विशेष रूप से CreatePaneWindow विधि का उपयोग करता है, लेकिन किसी भी HWND हैंडल को वापस खेलने के लिए कुछ भी अधिकारी नहीं है।

हम्म! यदि आपके पास एक विशिष्ट टूल विंडो है जिसे आप ट्विक करना चाहते हैं, तो हम एक गहरी नजर डाल सकते हैं, लेकिन मुझे लगता है कि 100% जेनेरिक टूल लिखना मुश्किल है।

EDIT: मैंने और अधिक खोज की है।

// WindowFrame needs Microsoft.VisualStudio.Platform.WindowManagement.dll 
public static IEnumerable<WindowFrame> EnumWindowFrames(Microsoft.VisualStudio.OLE.Interop.IServiceProvider sp, __WindowFrameTypeFlags frameTypes) 
{ 
    if (sp == null) 
     throw new ArgumentNullException("sp"); 

    ServiceProvider serviceProvider = new ServiceProvider(sp); 
    IVsUIShell4 shell = (IVsUIShell4)serviceProvider.GetService(typeof(SVsUIShell)); // VS 2010 only 

    IEnumWindowFrames framesEnum; 
    IVsWindowFrame[] frames = new IVsWindowFrame[1]; 
    uint numFrames; 
    shell.GetWindowEnum((uint)frameTypes, out framesEnum); 
    if (framesEnum == null) 
     yield break; 

    while ((framesEnum.Next(1, frames, out numFrames) == VSConstants.S_OK) && (numFrames == 1)) 
    { 
     WindowFrame frame = frames[0] as WindowFrame; 
     if (frame != null) 
      yield return frame; 
    } 
} 

यह WindowFrame की कई घटनाओं के दे देंगे: यह एक कोड है कि सभी खिड़कियां वर्तमान दृश्य स्टूडियो उदाहरण के फ्रेम (डॉक होने पर या अस्थायी) विश्लेषण करता है। विंडोफ्रेम को दस्तावेज नहीं किया गया है लेकिन यह सार्वजनिक है (माइक्रोसॉफ्ट में स्थित है। VisualStudio.Platform.WindowManagement.dll), ताकि आप इसके साथ खेल सकें। प्रत्येक विंडोफ्रेम उदाहरण में एक फ्रेम व्यू प्रॉपर्टी होती है जिसमें सामग्री प्रॉपर्टी होती है। यह सामग्री प्रॉपर्टी, मेरे निष्कर्षों से अधिकांश समय, एक डब्ल्यूपीएफ पैनल तत्व है। उस पैनल के नीचे पदानुक्रम तब निर्भर करेगा कि विंडो वास्तव में कैसे कार्यान्वित की जाती है।

यदि यह एक अप्रबंधित या Winforms (उदाहरण, .SQL संपादक) है, तो पैनल के बच्चों के संग्रह में एक HwndHost होगा। मैंने इसके साथ खेलने की कोशिश की है (SetLayeredWindowAttributes का उपयोग करके), लेकिन यह काम नहीं कर रहा है ...

यदि यह एक डब्ल्यूपीएफ है (उदाहरण के लिए, ब्रांड नया सी #/वीबी संपादक), तो एक विशाल WPF hiearchy होगा, जो अंततः IWfpTextView कार्यान्वयन पर जायेगा। आप इस पदानुक्रम में कई चीजें बदल सकते हैं, और कुछ काम करेंगे (जैसे पृष्ठभूमि संपत्ति), लेकिन ... पारदर्शिता से संबंधित, मुझे नहीं लगता कि यह संभव है क्योंकि रूट विंडो इसे अनुमति नहीं देती है (इसमें AllowTransparency सेट है झूठ बोलने के लिए, और इसे प्रदर्शित होने के बाद इसे बदला नहीं जा सकता है)। उदाहरण के लिए अस्पष्टता = 0.5 सेट करना काम करता है, लेकिन चूंकि कोई पारदर्शिता नहीं है, इसलिए प्रभाव सिर्फ मंद हो गया है ...

+0

जैसा कि सवाल कहते हैं, चिंता दस्तावेज (संपादक) विंडोज़ के बारे में है। यही कारण है कि मैंने इस पर एक बाउंटी शुरू कर दी है, क्योंकि इसे हल करने से मुझे शायद मेरी चिंता को हल करने की अनुमति मिलेगी http://stackoverflow.com/questions/4880186/visual-studio-2010-addin-which-makes- फ़्लोटिंग-विंडो-गैर-शीर्ष – Suma

+0

मैंने यूआईए सत्यापन को डाउनलोड किया है और फ्लोटिंग दस्तावेज़ विंडो गुणों का निरीक्षण करने के लिए इसका इस्तेमाल किया है। मेरे आश्चर्य के लिए टूल WindowPattern.Current.Is सबसे ऊपर झूठी के रूप में दिखाता है। पारदर्शिता के लिए, मुझे इससे संबंधित कुछ भी नहीं मिला। मैंने अतीत में कुछ एमएफसी विकास किया है, लेकिन कोई डब्ल्यूपीएफ नहीं है और मुझे नहीं पता कि क्या देखना है। – Suma

+0

@ सुमा - मुझे नहीं लगता कि पारदर्शिता की बात संभव है (मेरा संपादन देखें)। हालांकि, कुछ चीजें संभव हैं, उदाहरण के लिए फ्रेम की स्थिति स्वचालित करें। –

संबंधित मुद्दे