C# 用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.
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看起来不错。也许能帮助你!?