[转]C#无边框窗体移动的三种方法
2010-08-07 10:49
543 查看
[转]C#无边框窗体移动的三种方法
1. 重写WndProc![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
重写WndProc
protected override void WndProc(ref Message m)
{
const int WM_NCHITTEST = 0x84;
const int HTCLIENT = 0x01;
const int HTCAPTION = 0x02;
if (m.Msg == WM_NCHITTEST)
{
this.DefWndProc(ref m);
if (m.Result.ToInt32() == HTCLIENT)
m.Result = new IntPtr(HTCAPTION);
else
base.WndProc(ref m);
}
else
{
base.WndProc(ref m);
}
}
2.创建消息
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
创建消息
private const int WM_NCLBUTTONDOWN = 0x00A1;
private const int WM_NCHITTEST = 0x84;
private const int HT_CAPTION = 0x2;
private const int HT_CLIENT = 0x1;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
//this.Capture = false;
pictureBox1.Capture = false;
Message msg = Message.Create(Handle, WM_NCLBUTTONDOWN, (IntPtr)HT_CAPTION, IntPtr.Zero);
WndProc(ref msg);
}
3.调用API代码
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
调用API代码
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;
//在窗体的_MouseDown中加入如下代码:
如:
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}
相关文章推荐
- [转]C#无边框窗体移动的三种方法
- C#无边框窗体移动的三种方法
- [转]C#无边框窗体移动的三种方法
- [转]C#无边框窗体移动的三种方法
- C#WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置
- C# 无边框窗体 移动 两种方法
- C#移动无边框窗体的简单方法
- C#实现无边框窗体移动方法
- c# 无边框窗体鼠标点击移动方法
- c#禁止双击最大化,无边框窗体移动
- C# 无边框窗体之窗体移动实现代码
- C#-WinForm-无边框窗体的移动和阴影-API
- C# WinForm开发系列之自定义无边框窗体(最大化,最小化,关闭,拉伸和移动的相关知识)
- C# 无边框窗体移动 点击任务栏实现最小化与还原
- C#实现Winform无边框移动的方法
- 无边框窗体移动实现方法
- 使用C#实现移动无边框窗体
- 无边框窗体的移动方法
- c# winform移动无边框窗体
- C#开发——窗体去边框之后无法移动解决办法