2012-04-04 104 views
0

我有一個MDI父(Form1中)和MDI子(窗體2 )。我已經當前爲Form1中禁用滾動條時窗體2去過去Form1中的邊界放置內窗體2以下代碼:C#MDI - 隱藏滾動條MDI MDI調整大小後,當MDIChild越界

protected override void WndProc(ref Message m) 
{ 
    const int WM_MOVE = 0x0003; 

    switch (m.Msg) 
    { 
     case WM_MOVE: 
      return; 

     default: 
      base.WndProc(ref m); 
      break; 
    } 
} 

雖然滾動條爲Form1中就不會顯示Form2當用戶拖動Form2超出Form1的界限時超出界限。但是,如果用戶調整大小,將顯示滾動條Form1Form2超出界限。

如何解決它,以便不會發生這種情況

+0

WM_SIZE報告。這是一個非常糟糕的想法。至少移動子窗口而不是吞嚥消息。 – 2012-04-04 18:07:39

回答

1

,我發現我自己工作,能夠解決現在。在MDI表單(Form1)上。我使用下面的代碼。它至少有助於擺脫閃爍。

[System.Runtime.InteropServices.DllImport("user32.dll")] 

    private static extern int ShowScrollBar(IntPtr hWnd, int wBar, int bShow); 

    protected override void WndProc(ref Message m) 
    { 
     const int WM_MOVE = 0x0003; 
     const int WM_ENTERSIZEMOVE = 0x0231; 
     const int WM_EXITSIZEMOVE = 0x0232; 
     const int SB_BOTH = 3; 

     switch (m.Msg) 
     { 
      // Use SuspendLayout() instead of having constant flickering on resize starting 
      case WM_ENTERSIZEMOVE: 
       this.SuspendLayout(); 
       base.WndProc(ref m); 
       break; 

      // Do not forget to ResumeLayout() when resizing finished 
      case WM_EXITSIZEMOVE: 
       this.ResumeLayout(); 
       base.WndProc(ref m); 
       break; 

      default: 
       ShowScrollBar(this.Handle, SB_BOTH, 0); 
       base.WndProc(ref m); 
       break; 
     } 
    }