WindowsForm移動一個(gè)沒有標(biāo)題欄的窗口的方法
在WinForm程序中,要移動沒有標(biāo)題欄的窗口,基本的實(shí)現(xiàn)思路是監(jiān)聽需要拖動窗口內(nèi)的控件的鼠標(biāo)事件,然后將鼠標(biāo)位置發(fā)送給窗口進(jìn)行相應(yīng)的位移就可以了。通過借用Windows API也可以很容易實(shí)現(xiàn)這一點(diǎn),比如像下面這樣。
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(); // 鼠標(biāo)捕獲
[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);
}

當(dāng)然,你還可以向這樣向窗口發(fā)送消息,來實(shí)現(xiàn)拖動自定義標(biāo)題欄移動窗口
public const int WM_NCLBUTTONDOWN = 0x00A1;
public const int HTCAPTION = 2;
private void pnlHeader_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
// 釋放控件已捕獲的鼠標(biāo)
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移動一個(gè)沒有標(biāo)題欄的窗口的方法的詳細(xì)內(nèi)容,更多關(guān)于WindowsForm 移動窗口的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
c# Linq distinct不會調(diào)用Equals方法詳解
這篇文章主要介紹了c# Linq distinct不會調(diào)用Equals方法詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
WinForm中BackgroundWorker控件用法簡單實(shí)例
這篇文章主要介紹了WinForm中BackgroundWorker控件用法,以一個(gè)簡單實(shí)例形式分析了BackgroundWorker控件的定義、設(shè)置及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
C#歸并排序的實(shí)現(xiàn)方法(遞歸,非遞歸,自然歸并)
C#歸并排序的實(shí)現(xiàn)方法(遞歸,非遞歸,自然歸并),需要的朋友可以參考一下2013-04-04
Unity3D基于陀螺儀實(shí)現(xiàn)VR相機(jī)功能
這篇文章主要為大家詳細(xì)介紹了Unity3D基于陀螺儀實(shí)現(xiàn)VR相機(jī)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
C#如何將DataTable導(dǎo)出到Excel解決方案
C#運(yùn)算符大全_各種運(yùn)算符號的概述及作用

