2010-10-22 26 views
2

我有表格。我已經啓用了窗體上的透明度,並且已經刪除了標題欄和邊框。在裏面我創建了一個自定義用戶界面,它具有與窗口相同的功能。基本上,我的想法是創建自定義窗口。如何製作窗口可拖拽(C#Winforms)?

一切都按預期工作,但只有窗口拖動不起作用。我不知道如何啓用它。我爲此搜索了Google。但是我沒有爲我找到任何有用的信息。

請幫我實現這個窗口拖動。

+0

wat about'鼠標事件.... ??嘗試使用'鼠標'事件來移動窗口。 – 2010-10-22 08:23:21

+0

默認的winform行爲是通過它的標題欄拖動一個窗口,該標題欄會被刪除。請注意,當用戶看到無障礙窗口時,他們不太可能拖動和移動它。如果你仍然需要這個,你必須自己實現它,例如使用Cyril答案中提供的解決方案。 – Marijn 2010-10-22 08:36:33

+0

[按鍵+鼠標移動窗口(如linux下ALT +鼠標)](http://stackoverflow.com/questions/3100711/move-a-window-on-keypress-mouse-like-linux- alt-mouse-down) – 2010-10-22 09:00:38

回答

5

我已經通過捕獲mousedown(在mouseup上捕獲),然後mousemove實現了此行爲。

只需移動窗體座標(左邊,頂部),等價於鼠標移動(這些事件具有鼠標移動量)。

這對我來說很好。

+1

我希望你能提供一些代碼:) – 2013-09-30 06:23:55

0

最簡單的方法是處理WM_NCHITTEST消息並返回HTCAPTION您的自定義窗口的部分工作,如同標題欄在普通窗口中那樣工作。 Windows將完成其餘的工作。

1
class YourForm : Form 
{ 
    private const int WM_NCHITTEST = 0x84; 
    private const int HTCLIENT = 0x1; 
    private const int HTCAPTION = 0x2; 

    /// 
    /// Handling the window messages 
    /// 
    protected override void WndProc(ref Message message) 
    { 
      base.WndProc(ref message); 

      if (message.Msg == WM_NCHITTEST && (int)message.Result == HTCLIENT) 
       message.Result = (IntPtr)HTCAPTION; 
    } 
}