Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当拖动到屏幕顶部以外时禁用Windows捕捉窗体_C#_.net_Windows - Fatal编程技术网

C# 当拖动到屏幕顶部以外时禁用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);

我已经创建了一个不可重新调整大小的Windows窗体,它是800x600像素。我的问题是,当在屏幕分辨率上查看高度小于我的表单高度的表单时,对话框的底部被windows任务栏覆盖

我尝试通过使用以下方法让用户从任何地方拖动表单来解决此问题:

[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中有快照功能。这不是快照功能,只是它不允许您将窗口移动到屏幕顶部边缘之外