ग्राफिक डिस्प्ले प्रौद्योगिकियों में सुधार के साथ, ऑपरेटिंग सिस्टम के एपीआई में भी सुधार हुआ है, प्रोग्रामर को गैर-मानक इंटरफ़ेस तत्वों को विकसित करने के अधिक से अधिक अवसर प्रदान करते हैं। तो विंडोज 2000 ऑपरेटिंग सिस्टम के नवाचारों में से एक स्तरित खिड़कियां थीं, जिनमें से कुछ भाग पारभासी हो सकते हैं। जल्द ही, स्तरित विंडो के साथ काम करने के लिए एपीआई का विवरण एमएसडीएन पर उपलब्ध हो गया। हालाँकि, प्रोग्रामर के मंचों पर, विंडो को अर्ध-पारदर्शी कैसे बनाया जाए, इस बारे में अभी भी सवाल पूछे जा रहे हैं।
ज़रूरी
- - संकलक;
- - विंडोज़ प्रोग्रामिंग के लिए विंडोज़ एसडीके या फ्रेमवर्क।
निर्देश
चरण 1
उस विंडो के लिए एक हैंडल प्राप्त करें जिसे आप अर्ध-पारदर्शी बनाना चाहते हैं। एक विंडो खोजें या बनाएं। इसे बनाने के लिए, उपयोग किए गए ढांचे के वर्गों से संबंधित इन कार्यों के आसपास CreateWindow, CreateWindowEx API फ़ंक्शंस, या रैपर विधियों का उपयोग करें। CreateWindow फ़ंक्शन के लिए प्रोटोटाइप इस तरह दिखता है:
एचडब्ल्यूएनडी क्रिएटविंडो (एलपीसीटीएसटी एलपीक्लासनाम, एलपीसीटीएसटी एलपीविंडोनाम, DWORD dwStyle, इंट एक्स, इंट वाई, इंट एनविड्थ, इंट हाइट, एचडब्ल्यूएनडी एचडब्ल्यूएनडी माता-पिता,
एचएमईएनयू एचमेनू, HINSTANCE hInstance, एलपीवीओआईडी एलपीपरम);
जैसा कि आप देख सकते हैं, फ़ंक्शन निष्पादन के परिणामस्वरूप बनाई गई विंडो में एक हैंडल लौटाता है। यदि किसी रैपर वर्ग का उपयोग किया जाता है, तो हैंडल प्राप्त करने के लिए बनाई गई विंडो से संबंधित ऑब्जेक्ट पर इसके तरीकों का उपयोग करें।
चरण 2
एपीआई कॉल FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows, और उनके संयोजनों का उपयोग करके एक विंडो ढूँढना किया जा सकता है। आप WindowFromPoint और ChildWindowFromPoint फ़ंक्शंस का उपयोग करके किसी विशिष्ट क्षेत्र में विंडो के लिए एक हैंडल प्राप्त कर सकते हैं।
चरण 3
विंडो को विस्तारित शैली WS_EX_LAYERED पर सेट करें। SetWindowLong API या रैपर ऑब्जेक्ट की संबंधित विधियों का उपयोग करें। SetWindowLong फ़ंक्शन पूरी तरह से संशोधित विंडो पैरामीटर जानकारी को बदल देता है, इसलिए स्टाइल फ़्लैग के सेट के लिए पिछले मान को पुनः प्राप्त करने के लिए GetWindowLong फ़ंक्शन के संयोजन में इसका उपयोग करें। उदाहरण के लिए, शैली को इस तरह बदला जा सकता है:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
यहाँ hWnd पिछले चरण में वर्णित क्रियाओं को करने के परिणामस्वरूप पाया गया विंडो हैंडल है।
चरण 4
खिड़की को अर्ध-पारदर्शी बनाएं। SetLayeredWindowAttributes API या रैपर क्लास की विधियों का उपयोग करें। SetLayeredWindowAttributes फ़ंक्शन प्रोटोटाइप इस तरह दिखता है:
बूल सेटलेयर्डविंडोएट्रिब्यूट्स (एचडब्ल्यूएनडी एचडब्ल्यूएनडी, COLORREF क्रेकी, बाइट अल्फा, DWORD dwFlags);
चरण 5
फ़ंक्शन के लिए hwnd पैरामीटर पहले चरण में प्राप्त एक मान्य विंडो हैंडल होना चाहिए। crKey पैरामीटर एक रंग कुंजी है जिसका उपयोग अर्ध-पारदर्शी क्षेत्रों को परिभाषित करने के लिए किया जाता है। bAlpha पैरामीटर पारभासी मान निर्दिष्ट करता है। 0 के बराबर bAlpha पैरामीटर मान के साथ, "अर्ध-पारदर्शी" क्षेत्र पूरी तरह से पारदर्शी होंगे। यदि bAlpha पैरामीटर 255 है, तो वे पूरी तरह से अपारदर्शी होंगे। dwFlags पैरामीटर विंडो सामग्री के आगे प्रदर्शन का तरीका निर्धारित करता है। जब LWA_COLORKEY ध्वज को dwFlags मान में शामिल किया जाता है, तो विंडो के अर्धपारदर्शी क्षेत्रों को रंग कुंजी के आधार पर निर्धारित किया जाएगा। जब LWA_ALPHA ध्वज सक्षम होता है, तो पारभासी मान निर्धारित करने के लिए bAlpha पैरामीटर का उपयोग किया जाएगा।
चरण 6
संपूर्ण विंडो को अर्ध-पारदर्शी बनाने के लिए, पसंदीदा bAlpha पैरामीटर मान, LWA_ALPHA ध्वज के साथ SetLayeredWindowAttributes को कॉल करें, लेकिन कोई LWA_COLORKEY ध्वज नहीं। फ़ंक्शन के पहले पैरामीटर के रूप में पाए गए विंडो हैंडल का उपयोग करें। उदाहरण के लिए, विंडो को आधा पारदर्शी बनाने के लिए, कॉल का उपयोग करें:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0)), 128, LWA_ALPHA);