हम अपनी अधिकांश खिड़कियों पर विभिन्न गोलाकार किनारों के साथ एक चमकीले ऐप का विकास कर रहे हैं। मैं गैर-आयताकार आकार को परिभाषित करने के लिए विंडो क्षेत्रों का उपयोग कर रहा हूं, लेकिन लगभग हर कोई इस कारणों को छेड़छाड़ करने के लिए ऑब्जेक्ट करता है, क्योंकि पिक्सेल केवल पूरी तरह से अपारदर्शी या पूरी तरह से पारदर्शी हो सकता है।चिकनी विंडो सीमाओं को बनाने के लिए स्तरित विंडो का उपयोग
मैं स्तरित खिड़कियों का उपयोग करके इस के समाधान के साथ आया हूं, लेकिन हम यह सुनिश्चित करना चाहते हैं कि यह विभिन्न प्रणालियों पर चल रहा है (और उम्मीद है कि अच्छी तरह से चल रहा है), और मैं देखना चाहता हूं कि किसी के पास कोई बेहतर विचार है या नहीं , या मैं जो कर रहा हूं उसे अनुकूलित करने के तरीके। मुझे पता है कि स्तरित खिड़कियों को win2000 या बाद में आवश्यकता है, और यह ठीक है, क्योंकि यह पहले से ही अन्य कारणों से एक आवश्यकता है। कुछ बुनियादी परीक्षणों से यह Vista पर ठीक दिखता है, लेकिन अभी तक इसकी कोई गारंटी नहीं है।
यहां मैं क्या करता हूं: मेरे पास एक खिड़की है, इसे ए कॉल करें, नियंत्रण और टेक्स्ट के साथ और जो भी खिड़की शामिल है। मेरे पास विंडो ए के बच्चे के रूप में विंडो बी है, सिवाय इसके कि WS_CHILD की बजाय WS_POPUP शैली है, इसलिए यह स्वयं को ए के क्षेत्र के बाहर स्थित कर सकता है और ए के नियंत्रण के शीर्ष पर खींचा जा सकता है। विंडो बी में WS_EX_LAYERED शैली भी है, और प्रारंभिकरण पर, मैं UpdateLayeredWindow को ULW_ALPHA ध्वज के साथ कॉल करता हूं और एक अल्फा चैनल के साथ 32 बिट बिटमैप वाला एक स्रोत डीसी, प्रति-पिक्सेल अल्फा के साथ आकर्षित करने के लिए।
विंडो बी के लिए स्रोत डीसी में उपयोग किया जाने वाला बिटमैप खिड़की की सीमा के चारों ओर बस पिक्सल है जो मैं खिड़की की पृष्ठभूमि से पूरी पारदर्शिता में आसानी से मिश्रण करना चाहता हूं। मैं पूरे दो विंडो दृष्टिकोण को छोड़ दूंगा और केवल एक स्तरित विंडो का उपयोग करूँगा, सिवाय इसके कि जब आप UpdateLayeredWindow का उपयोग कर रहे हों, तो यह सामान्य WM_PAINT संदेशों के बदले मेमोरी में रखे बफर से खींचा जाता है और यह सब कुछ, और प्राप्त करने का प्रयास कर रहा है इंटरैक्टिव बाल नियंत्रण (और बाल खिड़कियां) अच्छी तरह से काम करने के लिए एक असाधारण परेशानी की तरह लगता है (और शायद सब कुछ के लिए भी काम नहीं करेगा)।
तो, यह मूल रूप से खिड़की ए है जिसमें सभी बाल नियंत्रण और जो भी हो, खिड़की बी सीधे इसके ऊपर तैरती है, एक अच्छी चिकनी सीमा खींचती है। मैं WM_MOVE संदेशों का जवाब देता हूं और इसके साथ विंडो बी को ले जाकर, और मेरे पास विंडो बी अक्षम है, इसलिए इसे कभी भी फोकस या इनपुट नहीं मिल सकता है (क्लिक पहले से ही हो सकता है, क्योंकि इसके कुछ भाग शून्य अस्पष्टता के हैं, जैसे बहुमत इसके आंतरिक हिस्सों में से पहले से ही चुनने से बाहर रखा गया है)।
किक्स के लिए, यह दिखाता है कि टुकड़े किस तरह दिखते हैं, यह दिखाने के लिए कि मेरा क्या मतलब थोड़ा बेहतर है।
- Window A's background, साइयन पूरी तरह से पारदर्शी पिक्सेल मास्क करने के लिए उपयोग किया जाता है।
- Window B's bitmap, अल्फा चैनल के साथ (निश्चित रूप से चित्रित नहीं है, यह एक jpg है) जो गैर-काले पिक्सल को पारदर्शिता में मिश्रित करेगा।
- Combined result
तो, यह काम करता है, लेकिन मैं यह वास्तव में यह करने के लिए सबसे अच्छा तरीका है कुछ नहीं हो सकता। मेरे पास दो प्रश्न हैं:
- क्या यह ध्वनि स्वीकार्य है, या क्या इसके बारे में कुछ भी भयानक रूप से भयानक है?
- जैसा कि यह वर्तमान में काम करता है, ऐसा लगता है कि यह ऑफ-स्क्रीन बफर का उपयोग विंडो के आकार (जो 1024x768 तक हो सकता है) का उपयोग कर रहा है, भले ही इसमें बहुत कम पिक्सेल के पास कोई गैर-शून्य अस्पष्टता डेटा हो - क्या यह होगा ओवरहेड के लायक और इसे अलग-अलग सीमा के टुकड़ों में काटने और उन्हें एक साथ कंपोजिट करने की अतिरिक्त जटिलता?
डौग, यदि आप इसके लिए कोड साझा कर सकते हैं तो यह बहुत अच्छा होगा। अग्रिम में धन्यवाद। –