2011-10-13 4 views
10

मैं वीएस -2010 (.NET 4.0) में WinForms एमडीआई ऐप विकसित कर रहा हूं और मैं सिर्फ एमडीआई पैरेंट फॉर्म में 3 डी सीमा से नफरत करता हूं।एमडीआई पैरेंट फॉर्म में MDIClient घटक से 3 डी सीमा (धूप) को कैसे हटाएं?

तो इसे हटाने के तरीके पर कोई विचार (इसे फ्लैट बनाएं या बस इसे कोई सीमा नहीं दें)?

+1

नहीं, आप इसके साथ काफी अटक गए हैं। एमडीआई क्लाइंट क्लास में कोई सीमावर्ती संपत्ति नहीं है और इसका कोई स्पष्ट तरीका नहीं है कि मैं इसके उदाहरण के निर्माण में हुकूमत देखता हूं। –

उत्तर

19

मैं जानता हूँ कि यह एक पुरानी पोस्ट है, लेकिन मैं कुछ समय बिताया है और दर्द 3 डी सीमा सामान काम कर बाहर (क्योंकि मैं इसे बहुत आवश्यक) भर में टुकड़े से करने के लिए इंटरनेट सहित:

Elements from Jacob Slusser's page at codeproject.com (Accessed 1st Aug'12)

तो यहाँ जाता है:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

namespace MDITest 
{ 
    public static class MDIClientSupport 
    { 
     [DllImport("user32.dll")] 
     private static extern int GetWindowLong(IntPtr hWnd, int nIndex); 

     [DllImport("user32.dll")] 
     private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 

     [DllImport("user32.dll", ExactSpelling = true)] 
     private static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); 

     private const int GWL_EXSTYLE = -20; 
     private const int WS_EX_CLIENTEDGE = 0x200; 
     private const uint SWP_NOSIZE = 0x0001; 
     private const uint SWP_NOMOVE = 0x0002; 
     private const uint SWP_NOZORDER = 0x0004; 
     private const uint SWP_NOREDRAW = 0x0008; 
     private const uint SWP_NOACTIVATE = 0x0010; 
     private const uint SWP_FRAMECHANGED = 0x0020; 
     private const uint SWP_SHOWWINDOW = 0x0040; 
     private const uint SWP_HIDEWINDOW = 0x0080; 
     private const uint SWP_NOCOPYBITS = 0x0100; 
     private const uint SWP_NOOWNERZORDER = 0x0200; 
     private const uint SWP_NOSENDCHANGING = 0x0400; 

     public static bool SetBevel(this Form form, bool show) 
     { 
      foreach (Control c in form.Controls) 
      { 
       MdiClient client = c as MdiClient; 
       if (client != null) 
       { 
        int windowLong = GetWindowLong(c.Handle, GWL_EXSTYLE); 

        if (show) 
        { 
         windowLong |= WS_EX_CLIENTEDGE; 
        } 
        else 
        { 
         windowLong &= ~WS_EX_CLIENTEDGE; 
        } 

        SetWindowLong(c.Handle, GWL_EXSTYLE, windowLong); 

        // Update the non-client area. 
        SetWindowPos(client.Handle, IntPtr.Zero, 0, 0, 0, 0, 
         SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | 
         SWP_NOOWNERZORDER | SWP_FRAMECHANGED); 

        return true; 
       } 
      } 
      return false; 
     } 

    } 
} 

प्रपत्र लोड घटना कॉल में:

form.SetBevel(false); 

मत भूलना नाम स्थान बदल सकते हैं और याद इस एक विस्तार विधि है, लेकिन यह एक और वर्ग एमडीआई में या आप में एक विधि कॉल सिर्फ जा करने के लिए परिवर्तित किया जा सकता करने के लिए मूल रूप

+0

आपके लिए उत्कृष्ट नौकरी man.upvote। धन्यवाद – Napster

+0

वह बहुत अच्छा था .. – Sayka

+0

क्या नायक ..... – zxc

0

बदलने का प्रयास करें FormBorderStyle संपत्ति FixedSingle

+1

यह पहली बात है जिसकी मैंने कोशिश की ... मुख्य रूप "sizability" खो देता है और 3 डी सीमा अभी भी है! – EmirZ

5

यदि आप बाहरी पुस्तकालयों को आयात नहीं करना चाहते हैं तो वहां धोखाधड़ी भी है जो एमडीआई कंटेनर नियंत्रण को पुनर्स्थापित/आकार देता है।

protected override void OnLoad(EventArgs e) 
    { 
     var mdiclient = this.Controls.OfType<MdiClient>().Single(); 
     this.SuspendLayout(); 
     mdiclient.SuspendLayout(); 
     var hdiff = mdiclient.Size.Width - mdiclient.ClientSize.Width; 
     var vdiff = mdiclient.Size.Height - mdiclient.ClientSize.Height; 
     var size = new Size(mdiclient.Width + hdiff, mdiclient.Height + vdiff); 
     var location = new Point(mdiclient.Left - (hdiff/2), mdiclient.Top - (vdiff/2)); 
     mdiclient.Dock = DockStyle.None; 
     mdiclient.Size = size; 
     mdiclient.Location = location; 
     mdiclient.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom; 
     mdiclient.ResumeLayout(true); 
     this.ResumeLayout(true); 
     base.OnLoad(e); 
    } 
संबंधित मुद्दे