2012-10-09 22 views
9

मैंने एक फॉर्म बनाया और इसमें गिलास को नीचे दी गई छवि में विस्तारित किया। लेकिन जब मैं खिड़की तो नहीं ले जाने के लिए यह के सभी स्क्रीन पर दिखाई देता है, कांच प्रतिपादन के बाद मैं इसे वापस ले जाने के गलत है: enter image description hereग्लास सही नहीं दिया गया है

मैं कैसे यह इतना संभाल कर सकते हैं विंडो ठीक से प्रदान की गई है? मुझे लगता है कि CreateGraphics आप कुछ दु: ख यहां खड़ी कर रहा है

[DllImport("dwmapi.dll")] 
private static extern void DwmExtendFrameIntoClientArea(IntPtr hWnd, ref Margins mg); 

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

public struct Margins{ 
    public int Left; 
    public int Right; 
    public int Top; 
    public int Bottom; 
} 

private void Form1_Shown(object sender, EventArgs e) { 
    this.CreateGraphics().FillRectangle(new SolidBrush(Color.Black), new Rectangle(0, this.ClientSize.Height - 32, this.ClientSize.Width, 32)); 
    bool isGlassEnabled = false; 
    Margins margin; 
    margin.Top = 0; 
    margin.Left = 0; 
    margin.Bottom = 32; 
    margin.Right = 0; 
     DwmIsCompositionEnabled(out isGlassEnabled); 

    if (isGlassEnabled) { 

      DwmExtendFrameIntoClientArea(this.Handle, ref margin); 
     } 
} 
+0

पर तर्कों का उपयोग करें, यह कैसे पता चलेगा कि यह दिखाई नहीं दे रहा है या नहीं? – Gabe

+1

सुनिश्चित करें कि आपका क्या मतलब है ... क्या आप कह रहे हैं कि यदि आप स्क्रीन के किनारे के पीछे खिड़की को ले जाते हैं और फिर से वापस आते हैं, तो उस अनुभाग में ग्लास गायब हो गया है जहां खिड़की स्क्रीन किनारे से छेड़छाड़ की जाती है? – series0ne

+1

पीएस मैंने अतीत में कई बार ग्लास का उपयोग करने पर देखा है। Google में डैनियल मॉथ और ग्लास के लिए खोजें ... वह ग्लास प्रभाव के साथ एक गुरु लगता है !! – series0ne

उत्तर

11

:

यह मेरा कोड है।

OnPaint विधि अधिभावी की कोशिश करो और बजाय PaintEventArgs से ग्राफिक वस्तु का उपयोग करें:

protected override void OnShown(EventArgs e) { 
    base.OnShown(e); 

    bool isGlassEnabled = false; 
    Margins margin; 
    margin.Top = 0; 
    margin.Left = 0; 
    margin.Bottom = 32; 
    margin.Right = 0; 
    DwmIsCompositionEnabled(out isGlassEnabled); 

    if (isGlassEnabled) { 
    DwmExtendFrameIntoClientArea(this.Handle, ref margin); 
    } 
} 

protected override void OnPaint(PaintEventArgs e) { 
    base.OnPaint(e); 

    e.Graphics.FillRectangle(Pens.Black, 
     new Rectangle(0, this.ClientSize.Height - 32, this.ClientSize.Width, 32)); 
} 

तो प्रपत्र का आकार बदलने के लिए, या तो निर्माता से जोड़ें:

public Form1() { 
    InitializeComponent(); 
    this.ResizeRedraw = true; 
} 

या आकार घटना को ओवरराइड :

protected override void OnResize(EventArgs e) { 
    base.OnResize(e); 
    this.Invalidate(); 
} 
+0

है, मैं वही कर रहा था, लेकिन मुझे अभी भी आकार बदलने के साथ कुछ समस्याएं थीं। कोशिश करो, और देखें? – Alan

4

निम्नलिखित कॉल आपके ऑनपेंट में होना चाहिए thod

FillRectangle(new SolidBrush(Color.Black), new Rectangle(0, this.ClientSize.Height - 32, this.ClientSize.Width, 32)); 

शेष केवल एक बार किया जाना है। CreateGraphics() को कॉल करने के बजाय ऑनपेंट (e.Graphics)

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