2010-04-19 7 views
5

मेरे आवेदन में मेरे पास एक ऐसा फॉर्म है जो मैं डीईएमएम एपीआई की विधि डीडब्ल्यूएक्सएंडेंडफ्रेम इंटिएंटएरिया का उपयोग करके ट्विक करता हूं ताकि एरो ग्लास टाइटल बार की ऊंचाई बढ़ाया जा सके ताकि मेरे फॉर्म क्लाइंट एरिया का हिस्सा खींचा जा सके एयरो फ्रेम पर। इस प्रभाव को प्राप्त करने के लिए, मैं क्लाइंट क्षेत्र के हिस्से पर एक काला आयताकार भी खींचता हूं जो ग्लास फ्रेम पर 'ओवर' होता है ताकि यह पारदर्शी दिखाई दे, जैसा कि कई ऑनलाइन लेख सुझाते हैं। यह विंडोज विस्टा/विंडोज 7 के तहत बहुत अच्छी तरह से काम करता था, लेकिन जैसा कि मैंने वीएस 2010 डाउनलोड किया था और मेरे आवेदन को बनाने के लिए मेरे लक्ष्य ढांचे के रूप में .NET Framework 4.0 का उपयोग किया था, यह दृष्टिकोण अब काम नहीं करता है। समस्या यह है कि काला आयताकार दिखाई देता है, यानी एरो ग्लास पर चित्रित करते समय काला रंग अब पारदर्शी नहीं माना जाता है। क्या किसी को पता है कि उसके साथ क्या गलत हो सकता है और इसे कैसे दूर किया जा सकता है?.NET Framework 4.0 और एरो ग्लास इश्यू पर ड्राइंग

+0

विंडोज 7 पर एयरो ग्लास काम करता है? मुझे लगता है कि यह विंडोज विस्टा पर केवल डीएचडब्लूएम का काम करता है। – Svisstack

+2

@ स्विसस्टैक: हाँ; एरो ग्लास विंडोज 7 पर काम करता है। – SLaks

+0

हाँ, यह काम करता है। काम नहीं करता है जिस तरह से मैं .NET (<4.0) – WorldIntruder

उत्तर

0

अगर यह अनुपयोगी है तो मुझे माफ़ कर दो, लेकिन क्या यह संभव है कि उन्होंने अपना रंग पैलेट बदल दिया हो? अक्सर ऐसा लगता है कि उन विंडोज़ इंटरऑप प्रकार एपीआई अपने डिफ़ॉल्ट पैलेट के अतिरिक्त पीबीजीआरए पैलेट का उपयोग कर सकते हैं, और यह संभव है कि उनका डिफ़ॉल्ट रंग-पैलेट एक फ्रेमवर्क संस्करण से दूसरे में बदल गया हो। यह जांचने के लिए पर्याप्त होना चाहिए कि यह सच है या नहीं।

(मुझे हार्डवेयर कर्सर को प्रस्तुत करने के साथ एक ही समस्या मिली, जहां कुछ परिस्थितियों में पारदर्शी और काला भ्रमित हो जाएगा। अंत में यह पता चला कि मैं पीबीजीआरए का गलत अनुमान लगा रहा था ताकि बीजीआर में से एक ए से अधिक हो, जो हो सकता है अपनी पृष्ठभूमि के बारे में सच रहें-पारदर्शी-रंग।)

डीडब्लूएम एपीआई विधि का उपयोग करने के साथ अन्य जटिलताओं भी हैं। मुझे पूरी तरह से यकीन नहीं है, लेकिन स्मृति से, नए मार्जिन को स्थापित करने में कुछ जटिल है - अगर मुझे सही याद आती है, तो उन्हें सभी को एक ही संकेत (+/-) या कलाकृतियों (जैसे आपकी अचानक काले पृष्ठभूमि दिखाई देने) की आवश्यकता होती है। कभी-कभी दिखाई दिया।

1

इस प्रश्न का उत्तर यहां वर्णित है: http://msdn.microsoft.com/en-us/magazine/cc163435.aspx#S6 सी # के समाधान के साथ। लिंक किए गए पृष्ठ (मामले में लिंक नीचे है) से

अंश:

अपने खिड़की पर एक पृष्ठभूमि के रूप में कांच के उपयोग में कुछ मुश्किल है। यदि आप स्वाभाविक रूप से अपारदर्शी (जैसे जीडीआई फ़ंक्शंस) प्रस्तुत करते हैं, तो आपको अपने आइटम कांच पर प्रस्तुत किया जाएगा, हालांकि कभी-कभी अप्रत्याशित परिणामों के साथ। यदि आप वास्तव में ग्लास सतह में प्रतिपादन करना चाहते हैं, तो आपको कार्यक्षमता का लाभ उठाने की आवश्यकता होगी जो रंगों के अल्फा चैनल का उपयोग करेगी, जैसे कि जीडीआई +, विंडोज प्रेजेंटेशन फाउंडेशन, या विंडोज एक्सपी थीम एपीआई।

एक विशेष गोचा यह है कि काले रंग में एक जीडीआई आइटम प्रतिपादन बिट पैटर्न 0x00000000 का उपयोग करता है - यदि आप अल्फा चैनल का उपयोग कर रहे हैं तो यह पूरी तरह पारदर्शी काला भी होता है। इसका मतलब यह है कि यदि आप एक काले जीडीआई ब्रश या पेन के साथ आकर्षित करते हैं तो आपको एक पारदर्शी रंग मिलेगा, न कि काले रंग का। यह प्रस्तुत करने वाली सबसे बड़ी समस्या तब होती है जब आप ग्लास क्षेत्र पर बैठे टेक्स्ट लेबल के नियंत्रण में डिफ़ॉल्ट टेक्स्ट रंग का उपयोग करने का प्रयास करते हैं। चूंकि डिफ़ॉल्ट टेक्स्ट रंग आमतौर पर काला होता है, इसलिए डीडब्लूएम इसे पारदर्शी मानने पर विचार करेगा और टेक्स्ट गलत तरीके से ग्लास में लिखा जाएगा।

और WinForms के लिए समाधान:

सौभाग्य से, वहाँ इस समस्या को हल तरीके का एक संख्या है। मालिक-ड्रा नियंत्रण का उपयोग करना एक है। एक बिटमैप को प्रस्तुत करना जिसमें अल्फा चैनल है, दूसरा है। सौभाग्य से, नियंत्रण पर पाठ प्राप्त करने का सबसे आसान तरीका है .NET Framework 2.0 आपके लिए जीडीआई + का उपयोग करना है। यह आपके नियंत्रण पर UseCompatibleTextRendering प्रॉपर्टी को सेट करके आसानी से पूरा किया जाता है। डिफ़ॉल्ट रूप से, यह गुण झूठी पर सेट है ताकि .NET Framework के पिछले संस्करणों के लिए लिखे गए नियंत्रण समान प्रस्तुत किए जाएंगे। लेकिन यदि आप इसे सत्य पर सेट करते हैं, तो आपका टेक्स्ट सही दिखने लगेगा।आप एप्लिकेशन के साथ विश्व स्तर पर संपत्ति सेट कर सकते हैं .etUseCompatibleTextRenderingDefault विधि। यदि आप विजुअल स्टूडियो® 2005 का उपयोग कर रहे हैं, तो टेम्पलेट कोड में आपके फॉर्म बनने से पहले मुख्य दिनचर्या में संगत पाठ-प्रतिपादन को गलत करने के लिए एक कॉल शामिल होगा। आप इसे नीचे दिखाए गए अनुसार इसे सही पर सेट करने के लिए इसे संपादित कर सकते हैं और ग्लास विंडो पर लिखे जाने पर आपके सभी नियंत्रण सही दिखाई देंगे।

static void Main() 
{ 
    Application.EnableVisualStyles(); 

    Application.SetCompatibleTextRenderingDefault(true); // this line fixes an issue 

    Application.Run(new GlassForm()); 
} 

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

  • कोई संबंधित समस्या नहीं^_^