C# 用C语言实现可移动面板控制#

C# 用C语言实现可移动面板控制#,c#,winforms,panel,C#,Winforms,Panel,我试图使用c#使面板控件可移动,但我的主窗体在拖动时会随面板控件移动。有更好的代码吗 public const int WM_NCLBUTTONDOWN = 0xA1; public const int HT_CAPTION = 0x2; [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); [DllImport("user32.

我试图使用c#使面板控件可移动,但我的主窗体在拖动时会随面板控件移动。有更好的代码吗

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern bool ReleaseCaptre();

public static void _MOVE_PANEL(IntPtr Handle, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
       ReleaseCaptre();
       SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    } 
}

private void sub_inv_pcount_edit_MouseMove(object sender, MouseEventArgs e) //panel move
{
    _MOVE_PANEL(Handle, e);
}

参见示例:

恐怕这不是一种可以调整以获得所需结果的方法。WM_nCluButtonDown本质上是窗口管理器决定如何在顶级窗口上处理鼠标事件的方式。它允许您创建具有自定义chrome的窗口,但不允许您对非顶级窗口(如面板)执行任何操作


你可以得到一个相当不错的工作拖动做显而易见的事情-在MouseMove,处理移动控件自己。不过,它的表现不如移动整个窗口。

这就是WM_nCluButtonDown所做的,它假装您单击了主窗口的标题栏。这打动了整个舍邦。谷歌“用鼠标移动面板”来寻找更好的代码,MSDN论坛上的热门搜索以及Stackoverflow看起来不错。也许能帮助你!?