C# 去掉标题栏后,这样用鼠标移动窗体?
C#去掉标题栏后,这样用鼠标移动窗体?我想做一个类似输入法窗体的小时钟,可是用this.FormBorderStyle=FormBorderStyle.None;去掉标题...
C# 去掉标题栏后,这样用鼠标移动窗体?
我想做一个类似输入法窗体的小时钟,可是用 this.FormBorderStyle = FormBorderStyle.None; 去掉标题栏后无法用鼠标移动窗体!!
特来请教解决法案,(最好就像,搜狗输入法那样,鼠标放到边上的时候,变成“十字”可以移动)
顺便说一下本人很菜,希望详细说一下谢谢! 展开
我想做一个类似输入法窗体的小时钟,可是用 this.FormBorderStyle = FormBorderStyle.None; 去掉标题栏后无法用鼠标移动窗体!!
特来请教解决法案,(最好就像,搜狗输入法那样,鼠标放到边上的时候,变成“十字”可以移动)
顺便说一下本人很菜,希望详细说一下谢谢! 展开
6个回答
展开全部
// 移动窗体
const int WM_NCLBUTTONDOWN = 0xA1;
const int HT_CAPTION = 0x2;
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
// 窗体上鼠标按下时
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left & this.WindowState==FormWindowState.Normal)
{
// 移动窗体
this.Capture = false;
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
const int WM_NCLBUTTONDOWN = 0xA1;
const int HT_CAPTION = 0x2;
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
// 窗体上鼠标按下时
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left & this.WindowState==FormWindowState.Normal)
{
// 移动窗体
this.Capture = false;
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
展开全部
偶的空间有篇关于C# Winform 不规则窗体的文章,对你有帮助,可以参考一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#region 实现点击移动
internal static int WM_NCHITTEST = 0x84;
internal static IntPtr HTCLIENT = (IntPtr)0x1;
internal static IntPtr HTCAPTION = (IntPtr)0x2;
internal static int WM_NCLBUTTONDBLCLK = 0x00A3;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCLBUTTONDBLCLK)
{
return;
}
if (m.Msg == WM_NCHITTEST)
{
base.WndProc(ref m);
if (m.Result == HTCLIENT)
{
m.HWnd = this.Handle;
m.Result = HTCAPTION;
}
return;
}
base.WndProc(ref m);
}
#endregion
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lgjlry/archive/2008/12/06/3460157.aspx
internal static int WM_NCHITTEST = 0x84;
internal static IntPtr HTCLIENT = (IntPtr)0x1;
internal static IntPtr HTCAPTION = (IntPtr)0x2;
internal static int WM_NCLBUTTONDBLCLK = 0x00A3;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCLBUTTONDBLCLK)
{
return;
}
if (m.Msg == WM_NCHITTEST)
{
base.WndProc(ref m);
if (m.Result == HTCLIENT)
{
m.HWnd = this.Handle;
m.Result = HTCAPTION;
}
return;
}
base.WndProc(ref m);
}
#endregion
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lgjlry/archive/2008/12/06/3460157.aspx
参考资料: http://blog.csdn.net/lgjlry/archive/2008/12/06/3460157.aspx
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我想了三个方法,有两个别人已答过
1,通过事件,对于界面复杂点的窗体效率会成为问题
2.重写窗口函数,修改消息,窗体会失去对其它事件的响应,
3.通过发送假消息
步骤:
1.引入命名空间using System.Runtime.InteropServices;
2.声名两个API函数
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
3.可以用窗体的MouseDown,当然也可以用窗体上的控件的这个事件,要里面可以做一些处理,要移动就要里面写上这两句
ReleaseCapture();//首先释放鼠标焦点捕获
SendMessage(this.Handle, 0x0112, 0xF011, 0);//然后向当前窗体发送假消息
1,通过事件,对于界面复杂点的窗体效率会成为问题
2.重写窗口函数,修改消息,窗体会失去对其它事件的响应,
3.通过发送假消息
步骤:
1.引入命名空间using System.Runtime.InteropServices;
2.声名两个API函数
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
3.可以用窗体的MouseDown,当然也可以用窗体上的控件的这个事件,要里面可以做一些处理,要移动就要里面写上这两句
ReleaseCapture();//首先释放鼠标焦点捕获
SendMessage(this.Handle, 0x0112, 0xF011, 0);//然后向当前窗体发送假消息
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
搜索 “C# 移动无标题窗体”
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当鼠标点击那个控件,判断鼠标的位置,然后窗体根据鼠标移动位置来移动
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询