2012-10-21 47 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;'是包括在内。 –