2008-11-21 14 views
5

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

तो क्या मैं एक नियंत्रण कर सकता हूं जो को पर चित्रित नहीं करता है, सिवाय इसके कि यह अपारदर्शी कहां है? इस तरह, अभिभावक नियंत्रण वीडियो पर पेंट नहीं करेगा।

मुझे पता है कि मैं सीमा को चार नियंत्रणों में से बाहर कर सकता हूं (या अधिक यदि मैं इसे धराशायी करना चाहता हूं) लेकिन क्या ऐसा करना संभव है जो मैं केवल एक नियंत्रण का उपयोग करना चाहता हूं?


rslite सही है - हालांकि आप भी रूप में अपने उदाहरण की तरह PInvoke उपयोग करने के लिए अब तक जाने की जरूरत नहीं है करता है - Control.Region संपत्ति पूरी तरह से पर्याप्त है।

उत्तर

4

आप एक छेद के साथ एक क्षेत्र बनाने और SetWindowRgn के साथ नियंत्रण क्षेत्र सेट करने का प्रयास कर सकते हैं।

यहां एक example है (मुझे बेहतर नहीं मिल सका)। विचार दो क्षेत्रों को बनाने और बाहरी से आंतरिक को घटा देना है। मुझे लगता है कि आपको जो चाहिए वह आपको देना चाहिए।

-1

आप Form.TransparencyKey संपत्ति सेट करने का प्रयास कर सकते हैं। विफल होने पर, आप फ्रेम बफर तक पहुंच प्राप्त करने के लिए डायरेक्टएक्स का उपयोग कर सकते हैं और सीधे इसे आकर्षित कर सकते हैं।

+0

मैंने सवाल को गलत तरीके से पढ़ा। यद्यपि रूपों को पारदर्शी बनाया जा सकता है और उनके माध्यम से वीडियो दिखाया जा सकता है, नियंत्रण/बाल रूप के साथ ऐसा करना बहुत कठिन होता है और उनके अद्यतन पर पेंट घटनाओं को बढ़ाने के लिए पारदर्शी नियंत्रण के तहत नियंत्रण की आवश्यकता होती है। – Skizz

0

मैं कक्षा नियंत्रण से इसके लिए एक ओवरराइड फ़ंक्शन का उपयोग करता हूं।

  1. createparams संपत्ति अब इंगित करता है कि नियंत्रण पारदर्शी हो सकता है।

  2. InvalidateEx माता पिता के क्षेत्र में, जहां नियंत्रण

  3. रखा गया है रद्द करने के लिए आप नियंत्रण (')

    Imports System.Windows.Forms.Design 
    Imports System.Reflection 
        Public Class TransparentControl : Inherits Control 
         Protected Overrides ReadOnly Property CreateParams As CreateParams 
          Get 
           Dim cp As CreateParams = MyBase.CreateParams() 
           cp.ExStyle = cp.ExStyle Or 32 'WS_EX_TRANSPARENT 
           Return cp 
          End Get 
         End Property 
         Protected Sub InvalidateEx(rct As Rectangle) 
          Me.Invalidate(rct) 
          If IsNothing(Parent) Then Exit Sub 
          Parent.Invalidate(New Rectangle(Me.Location, rct.Size), True) 
         End Sub 
         Protected Sub InvalidateEx() 
          Me.Invalidate() 
          If IsNothing(Parent) Then Exit Sub 
          Parent.Invalidate(New Rectangle(Me.Location, Me.Size), True) 
         End Sub 
         Protected Overrides Sub OnPaintBackground(pevent As PaintEventArgs) 
          'MyBase.OnPaintBackground(pevent) 
         End Sub 
    
         Protected Overrides Sub OnPaint(e As PaintEventArgs) 
          MyBase.OnPaint(e) 
          'draw the layout on e.Graphics 
         End Sub 
        End Class 
    

आप से backcolor का स्वत: रंग निष्क्रिय करने के लिए है के लिए आवश्यक है अपना नियंत्रण बनाने के लिए इस वर्ग का विस्तार कर सकते हैं। कक्षा डिबग करने के बाद टूलबॉक्स में दिखाई देगा।

आशा है कि यह चाल है।

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