WindowsForm移動一個沒有標題欄的窗口的方法
更新時間:2020年07月18日 09:48:11 作者:zhuanghamiao
這篇文章主要介紹了WindowsForm移動一個沒有標題欄的窗口的方法,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
在WinForm程序中,要移動沒有標題欄的窗口,基本的實現思路是監(jiān)聽需要拖動窗口內的控件的鼠標事件,然后將鼠標位置發(fā)送給窗口進行相應的位移就可以了。通過借用Windows API也可以很容易實現這一點,比如像下面這樣。
public class Win32Api { public const int WM_SYSCOMMAND = 0x112; public const int SC_DRAGMOVE = 0xF012; [DllImport("user32.Dll", EntryPoint = "ReleaseCapture")] public extern static void ReleaseCapture(); // 鼠標捕獲 [DllImport("user32.Dll", EntryPoint = "SendMessage")] public extern static void SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam); // 將消息發(fā)送給指定的窗口 } private void pnlHeader_MouseDown(object sender, MouseEventArgs e) { Win32Api.ReleaseCapture(); Win32Api.SendMessage(this.Handle, Win32Api.WM_SYSCOMMAND, Win32Api.SC_DRAGMOVE, 0); }
當然,你還可以向這樣向窗口發(fā)送消息,來實現拖動自定義標題欄移動窗口
public const int WM_NCLBUTTONDOWN = 0x00A1; public const int HTCAPTION = 2; private void pnlHeader_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { // 釋放控件已捕獲的鼠標 pnlHeader.Capture = false; // 創(chuàng)建并發(fā)送WM_NCLBUTTONDOWN消息 Message msg = Message.Create(this.Handle, Win32Api.WM_NCLBUTTONDOWN, new IntPtr(Win32Api.HTCAPTION), IntPtr.Zero); this.DefWndProc(ref msg); } }
以上就是WindowsForm移動一個沒有標題欄的窗口的方法的詳細內容,更多關于WindowsForm 移動窗口的資料請關注腳本之家其它相關文章!
相關文章
c# Linq distinct不會調用Equals方法詳解
這篇文章主要介紹了c# Linq distinct不會調用Equals方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12WinForm中BackgroundWorker控件用法簡單實例
這篇文章主要介紹了WinForm中BackgroundWorker控件用法,以一個簡單實例形式分析了BackgroundWorker控件的定義、設置及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08