无边框窗体拖动问题

小伙伴程序设计 2012-09-17 12:55:29
定义了一个类:
    class DragForm
{
private int x;
private int y;
private Point yyy;
private bool _t;
public bool t
{
get { return t; }
set { _t = value; }
}
public void setXy(Control f)
{
yyy =f.PointToClient(Control.MousePosition);
}
public void dragForm(Control f)
{
Point xxx = Control.MousePosition;
x = xxx.X;
y = xxx.Y;
if (_t == true)
{
f.Top = y - yyy.Y;
f.Left = x - yyy.X;
}
}
}

类的作用是拖动窗体,但是我可以实现拖动。无法实现像普通有边框窗体拖动时有一个灰色边框的效果。
比如下图~

请问高手,我应该要怎么实现这一的功能呢?
...全文
113 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我在窗体的mousedown、mouseMove、mouseup中都添加了代码。可以实现重绘不留残影的功能。
但是没法实现有一个灰色边框。要怎么做呢?
  • 打赏
  • 举报
回复
上代码:
using System.Runtime.InteropServices;引用命名空间
    class ApiDragForm
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);

public void dragApi(Control f)
{
f.Capture = false;
SendMessage(f.Handle, /*WM_SYSCOMMAND */274,/*移动信息SC_MOVE=*/61456 +/*HTCAPTION =2*/2, 0);
}
}


之后在窗体的mouseDown事件中添加如下代码:


ApiDragForm aD = new ApiDragForm();
aD.dragApi(this);
  • 打赏
  • 举报
回复
谢谢大大,测试有效果,不过我已经通过API的方式做出来了。API可以定义到类里,更方便点。[Quote=引用 8 楼 的回复:]

用标准方法:
如何通过拖动窗体的工作区来移动窗体
[/Quote]
iyomumx 2012-09-17
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
大大们来啊!
  • 打赏
  • 举报
回复

像这样。灰色边框可以随意到处拖,释放鼠标后就将窗体移动到释放鼠标的位置去了。
  • 打赏
  • 举报
回复
画出这个?我需要的是鼠标没释放前,有一个虚拟的边框在鼠标释放的位置,鼠标释放之后将窗体移动到鼠标位置。[Quote=引用 4 楼 的回复:]

自己在窗体四周画出来就行了,OnPaint中画
[/Quote]
bdmh 2012-09-17
  • 打赏
  • 举报
回复
自己在窗体四周画出来就行了,OnPaint中画
  • 打赏
  • 举报
回复
各位:劳烦看看呗。这样的情况,我应该在窗口的某个地方绘制?
  • 打赏
  • 举报
回复
我是这样用的。

110,567

社区成员

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

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

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