因为界面的要求,要使用一个没有边框的Form,但是这样就没有办法拖动窗口了. 着急等待中...

keDelegate 2003-08-30 04:10:45
如何解决拖动的问题?
...全文
51 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪狼1234567 2003-08-30
  • 打赏
  • 举报
回复
重载消息处理函数
当程序受到(WM_NCHITTEST)的时候,改变消息的处理结果返回给系统
就是欺骗windows让他以为鼠标点到了表题栏上,这行就可以托动了
protected override void WndProc(ref Message msg)
{
if (msg.Msg == 0x0084) // WM_NCHITTEST
msg.Result = (IntPtr) 2; // HTCAPTION
else
base.WndProc(ref msg);
}
当拖动的时候,转换消息
if (msg.Msg == 0x0084) // WM_NCHITTEST
msg.Result = (IntPtr) 2; // HTCAPTION
else
rouser 2003-08-30
  • 打赏
  • 举报
回复
全局變量 int ox; int oy;

Form_MouseDown(...)
{
ox = e.X;
oy = e.Y;
}

Form_MouseMove(...)
{
if(e.Button == MouseButtons.Left)
{
this.Left += (e.X - ox);
this.Top += (e.Y - oy);
}
}
TheAres 2003-08-30
  • 打赏
  • 举报
回复
可以在mouse_down事件中发送WM_NCLBUTTONDOWN来实现你要的效果,可以参考下面的代码.

using System.Runtime.InteropServices;
............
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HTCAPTION = 0x2;

[DllImportAttribute ("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

[DllImportAttribute ("user32.dll")]
public static extern bool ReleaseCapture();

private void Form2_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
树猫 2003-08-30
  • 打赏
  • 举报
回复
写窗体的鼠标事件

110,524

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧