2012-12-02 51 views
1

我創建了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不允許將任何窗口拖到屏幕的頂部邊緣之外。它將窗口對齊回到屏幕的頂部。

我正在尋找一種方法來禁用此窗口行爲,至少對於我的表單。

+0

哪個版本的Windows? –

+0

所有人...... XP,Vista,7和8 –

+0

不知道XP中有一個快照功能。 –

回答

0

我能夠用小把戲解決這個問題。主要是處理ResizeEnd事件並跟蹤MouseDown事件和ResizeEnd事件之間的鼠標指針位置。然後將差異添加到/從保存在MouseDown事件中的初始表單的Y座標中減去,然後將表單的位置設置爲該座標。

如果任何人都可以提供其他答案,由於Windows捕捉窗體和代碼強制其位置之間的位置差異,會導致某種閃爍,因此我仍對其他答案保持開放。