2008-12-08 15 views
5

के बिना न्यूनतम विंडो को पुनर्स्थापित कैसे करें मैंने Vista के लिए एक एक्सपोज़-क्लोन बनाया है जिसे कभी-कभी कम से कम एक विंडो को पुनर्स्थापित करने की आवश्यकता होती है। मैंने इसे SetWindowPlacement फ़ंक्शन के साथ करने में कामयाब रहा है। समस्या यह है कि खिड़की अच्छी तरह से स्क्रीन में फिसल जाने के बाद यह खिड़की को पेंट करता है जो बकवास की तरह दिखता है।फ़्लिकर

इस कोड को मैं शीर्ष करने के लिए एक खिड़की लाने के लिए और देने के लिए इस्तेमाल करते हैं यह ध्यान केंद्रित:

private static void ActivateWindow(IntPtr windowToShow) 
    { 
     RectAPI r = new RectAPI(); 
     Win32.GetWindowRect(windowToShow, ref r); 

     if (r.top == -32000) //r.top is -32000 if the window is in minimized state 
     { 
      WINDOWPLACEMENT wp = new WINDOWPLACEMENT(); 
      Win32.GetWindowPlacement(windowToShow, ref wp); 

      if (wp.flags == WindowPlacementFlags.WPF_RESTORETOMAXIMIZED) 
       wp.showCmd = cmdShow.SW_SHOWMAXIMIZED; 
      else 
       wp.showCmd = cmdShow.SW_RESTORE; 

      Win32.SetWindowPlacement(windowToShow, ref wp); 
     } 

     Win32.SetForegroundWindow(windowToShow); 
    } 

तो मैं एक खिड़की है कि पहले से ही बहाल है यह केवल SetForegroundWindow कॉल करेंगे और खिड़की मिल जाएगा पर इसका इस्तेमाल जेड ऑर्डर के शीर्ष पर और किसी भी झिलमिलाहट के बिना फोकस प्राप्त करें।

लेकिन अगर मैं इसे कम से कम विंडो पर कॉल करता हूं तो मुझे विंडो को पुनर्स्थापित स्थिति में वापस लाने के लिए SetWindowPlacement का भी उपयोग करना होगा। खिड़की को पुनर्निर्मित करने और झिलमिलाहट करने का यही कारण है:/

फ़्लिकर के बिना एक न्यूनतम विंडो को पुनर्स्थापित करने का एक तरीका होना चाहिए क्योंकि विंडो प्रबंधक में निर्मित यह करता है।

उत्तर

2

ऐसा करने का एक तरीका डबल-बफरिंग तकनीक का उपयोग करना है: ऑफ-स्क्रीन बिटमैप पर पेंट करें, फिर पुनर्स्थापित करें, फिर स्क्रीन पर बिटमैप को ब्लूट करें। लेकिन यह एक छोटी सी खिड़की को बहाल करने पर एकमात्र परिदृश्य है जहां इसकी आवश्यकता है, तो यह ओवरकिल की तरह लगता है। हो सकता है कि दूसरों के पास बेहतर विचार हों?

इसके अलावा, यदि आप पूरे विंडो क्लाइंट क्षेत्र को पेंट करते हैं, तो आप WM_ERASEBKGND को अक्षम कर सकते हैं (या इसके बजाय, कहें कि आपने इसे संसाधित किया है लेकिन कुछ भी नहीं किया है) अनियंत्रित fill-with- पृष्ठभूमि-फिर-रेड्रो अनुक्रम।

1

This link एमएसडीएन पर समझाएगा कि आप अपने मामले में विंडो पेंटिंग को कैसे संभालना चाहते हैं। विंडो इवेंट जैसे विंडो रीफ्रेश या न्यूनतम/अधिकतम करने के लिए आपकी खिड़की या खिड़की के क्षेत्र की मरम्मत की आवश्यकता होगी।

हैप्पी कोडिंग !!

0

मैं ओपी हूं ... दुर्घटना ने मेरी कुकी खा ली।

अध्ययन किया गया कि कैसे विंडोज फ्लिप 3 डी और टास्कबार इसे थोड़ा करीब प्रबंधित करता है और वे वास्तव में से पहले को अंगूठी की एनीमेशन शुरू करते हैं। एक विंडो को कम करने का प्रयास करें और फिर इसे flip3d के साथ पुनर्स्थापित करें, आपको इसे पुन: स्थापित करने से पहले 3 डी-विंडो पर एक छोटा झपकी दिखाई देगी।

मेरे ऐप के साथ एक ही चीज़ का प्रयास किया और यह बहुत अच्छा दिखता है, सही नहीं बल्कि स्वीकार्य है:/

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