2008-09-15 12 views
8

मैं सी # में कस्टम नियंत्रण बनाना चाहता हूं। लेकिन हर बार जब मुझे अपने नियंत्रण को पूरी तरह से दोबारा हटा देना पड़ता है, तो यह झिलमिलाहट करता है, भले ही मैं डबल बफरिंग (पहले एक छवि को चित्रित करता हूं) और उसे मार रहा हूं)।विंडोज़ में झिलमिलाहट को खत्म करने के लिए कैसे। स्क्रॉल करते समय कस्टम नियंत्रण नियंत्रण?

मुझे पूरी तरह से फिर से निकालने के दौरान झिलमिलाहट को कैसे खत्म कर सकता हूं?

उत्तर

13

आप InitiliseComponent कॉल के बाद निम्नलिखित को अपने कन्स्ट्रक्टर में डालने का प्रयास कर सकते हैं।

SetStyle(ControlStyles.OptimizedDoubleBuffer | 
     ControlStyles.UserPaint | 
     ControlStyles.AllPaintingInWmPaint, true); 

संपादित करें:

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

+0

के बजाय सी से नकल ++ मैं आमतौर पर Application.Run से पहले में है कि सामान रखा, लेकिन हाँ यह मुझे लगता है कि इस समस्या का सबसे अच्छा समाधान है। – Quibblesome

+0

मैं सहमत हूं। मुझे एक और झिलमिलाहट से संबंधित प्रश्न में एक अच्छा यूआरएल भी मिला है। http://www.codeproject.com/KB/graphics/DoubleBuffering.aspx – user7305

+0

मैंने बहुत अलग समाधानों की कोशिश की है लेकिन यह इसे ठीक करता है !! InitializeComponent() के बाद इसे रखने के लिए +1 के लिए +1; !! xoxoxo – Emily

0

आप कहते हैं कि आपने डबल बफरिंग की कोशिश की है, लेकिन फिर आप पहले एक छवि को चित्रित करते हैं और उसे दबाते हैं। क्या आपने इसे छवि के साथ स्वयं करने के बजाय निर्माता में DoubleBuffered = true सेट करने का प्रयास किया है?

1

यह काफी अच्छा सिर्फ कॉल करने के लिए

SetStyle(ControlStyles::UserPaint | ControlStyles::AllDrawingInWmPaint, true); 

झिलमिलाते आप सबसे अधिक संभावना देख रहे हैं क्योंकि विंडोज नियंत्रण की पृष्ठभूमि ड्रॉ पहले (WM_ERASEBKGND के माध्यम से) हो सकता है, तो अपने नियंत्रण जो कुछ ड्राइंग आप की जरूरत करने के लिए पूछता है करने के लिए (WM_PAINT के माध्यम से)। पृष्ठभूमि पेंट को अक्षम करके और अपने ऑनपेंट ओवरराइड में सभी पेंटिंग करने से डबल बफरिंग के लिए आवश्यक सभी मेमोरी का उपयोग किए बिना 99% मामलों में समस्या को खत्म कर सकते हैं।

8

मैंने इसे एक कामकाजी सी # प्रोग्राम से खींच लिया। अन्य पोस्टर सिंटैक्स त्रुटि है और स्पष्ट रूप से सी #

SetStyle(ControlStyles.OptimizedDoubleBuffer | 
         ControlStyles.UserPaint | 
         ControlStyles.AllPaintingInWmPaint, true); 
संबंधित मुद्दे