2012-10-21 45 views
1

我有一個MDI父容器(表格樣式:無)適合對1280×800。兒童形式適合在孩子邊緣和父親之間填充,比如可能有1或2個像素填充。意思是看起來無縫。MDI子捕獲鼠標輸入移動父MDI容器

我知道如何使獨立的形式拖動(無論在哪裏,你點擊並按住形式),但有可能有一個孩子決定到MDI父那裏在屏幕上移動?原因在於用戶可以點擊父母上沒有任何東西。我們不能將對象添加到父級(如菜單),因爲它會與我們要做的設計發生衝突。

建議在這一個?目標是用戶可以點擊並拖動孩子的任何地方,它會移動整個應用程序。

回答

1

試試這個:

public partial class Form1 : Form { 
    private const int WM_NCLBUTTONDOWN = 0xA1; 
    private const int HT_CAPTION = 0x2; 

    [DllImportAttribute("user32.dll")] 
    private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); 
    [DllImportAttribute("user32.dll")] 
    private static extern bool ReleaseCapture(); 

    public Form1() { 
    InitializeComponent(); 
    Form f = new Form(); 
    f.MouseDown += ChildForm_MouseDown; 
    f.MdiParent = this; 
    f.Show(); 
    } 

    void ChildForm_MouseDown(object sender, MouseEventArgs e) { 
    if (e.Button == MouseButtons.Left) { 
     ReleaseCapture(); 
     SendMessage(this.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); 
    } 
    } 
} 

MDI父窗體是聽孩子鼠標按下事件,當用戶單擊子窗體上,它會像用戶點擊的標題欄主要形式。

+0

偉大的作品,謝謝 - 只需要確保使用'System.Runtime.InteropServices;'是包括在內。 –