C# 当拖动到屏幕顶部以外时禁用Windows捕捉窗体
我已经创建了一个不可重新调整大小的Windows窗体,它是800x600像素。我的问题是,当在屏幕分辨率上查看高度小于我的表单高度的表单时,对话框的底部被windows任务栏覆盖 我尝试通过使用以下方法让用户从任何地方拖动表单来解决此问题:C# 当拖动到屏幕顶部以外时禁用Windows捕捉窗体,c#,.net,windows,C#,.net,Windows,我已经创建了一个不可重新调整大小的Windows窗体,它是800x600像素。我的问题是,当在屏幕分辨率上查看高度小于我的表单高度的表单时,对话框的底部被windows任务栏覆盖 我尝试通过使用以下方法让用户从任何地方拖动表单来解决此问题: [DllImport("user32.dll")] static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, UIntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, UIntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
static extern bool ReleaseCapture(IntPtr hwnd);
const uint WM_SYSCOMMAND = 0x112;
const uint MOUSE_MOVE = 0xF012;
public void Drag()
{
DefWindowProc(this.Handle, WM_SYSCOMMAND, (UIntPtr)MOUSE_MOVE, IntPtr.Zero);
}
private void OnMainPanelMouseDown(object sender, MouseEventArgs e)
{
Control ctrl = sender as Control;
ReleaseCapture(ctrl.Handle);
this.Drag(); // put the form into drag mode.
}
我可以把我的表格拖到任何地方,但现在我有一个问题。Windows不允许将任何窗口拖出屏幕的上边缘。它将窗口捕捉回屏幕顶部
我正在寻找一种方法来禁用此windows行为,至少对我的表单是这样。我可以用一个小技巧解决这个问题。主要是处理ResizeEnd事件和跟踪MouseDown事件和ResizeEnd事件之间的鼠标指针位置。然后在MouseDown事件中保存的初始表单的Y坐标中添加/减去差值,然后只需将表单的位置设置为该坐标
如果有人能提供不同的答案,我仍然愿意接受其他答案,因为这会导致某种闪烁,因为Windows捕捉表单和代码强制其位置之间的位置差异。所有答案。。XP、Vista、7和8不知道XP中有快照功能。这不是快照功能,只是它不允许您将窗口移动到屏幕顶部边缘之外