2011-04-20 14 views
7

मैं एक सी # अनुप्रयोग विकसित कर रहा हूं जो मुख्य रूप से विंडोज एयरो का समर्थन करता है।डीडब्लूएम संरचना/एयरो ग्लास अक्षम होने पर मैं ओएस-स्तरीय ईवेंट की सदस्यता कैसे ले सकता हूं?

कुछ अनुप्रयोग जो विजुअल स्टाइल का समर्थन नहीं करते हैं, उदाहरण के लिए GoToMeeting, दृश्य शैलियों को अक्षम करें और मेरा फॉर्म गलत तरीके से खींचा गया है जबकि GoToMeeting चल रहा है (एयरो क्लाइंट क्षेत्र काला खींचा गया है)।

दृश्य शैलियों को अक्षम करते समय निकाल दिए गए ओएस ईवेंट की सदस्यता कैसे ले सकती है? फिर मैं सही ढंग से तैयार होने के लिए अपनी विंडो में क्लाइंट क्षेत्र को समायोजित कर सकता था।

प्रबंधित और अप्रबंधित समाधान मेरे लिए मान्य हैं।

अग्रिम धन्यवाद।


संपादित:

private const int WM_DWMCOMPOSITIONCHANGED = 0x31e; 

[DllImport("dwmapi.dll")] 
private static extern void DwmIsCompositionEnabled(ref bool pfEnabled); 

protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == WM_DWMCOMPOSITIONCHANGED) 
    { 
     bool compositionEnabled = false; 
     DwmIsCompositionEnabled(ref compositionEnabled); 

     if (compositionEnabled) 
     { 
      // composition has been enabled 
     } 
     else 
     { 
      // composition has been disabled 
     } 
    } 

    base.WndProc (ref m); 
} 
+1

यह पता लगाएगा कि क्या एरो सक्षम है या नहीं? यदि ऐसा है, तो यह मदद कर सकता है: http://stackoverflow.com/questions/5114389/how-make-sure-areo-effect-is-enabled – joshhendo

उत्तर

5

विंडोज अपने उच्चस्तरीय खिड़की को संदेश भेजता है: हंस के जवाब के अनुसार, यहां इस घटना का प्रबंधन कोड है। एक Winforms रूप के लिए एक WndProc ओवरराइड, आप इसे फंस जाएगा। WM_DWMCOMPOSITIONCHANGED के लिए सुनो, संदेश संख्या 0x31e।

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

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