winform中怎么实现悬浮窗口?(急)

Kanderliu 2005-04-23 03:14:50
就是可以悬浮在主窗体之上,可以在自由操作住窗体,这个悬浮窗口类似于一个工具条一样的窗口.
...全文
1567 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alabama 2005-04-24
  • 打赏
  • 举报
回复
鼠标移动问题。

public class MousePoint
{
public int X;
public int Y;
public MousePoint()
{
X=0;
Y=0;
}
public MousePoint(int x,int y)
{
X=x;
Y=y;
}

}




private MousePoint oldMP = new MousePoint();
private MousePoint newMP = new MousePoint();
private bool MDown = false;

private void Form2_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(MDown == true)
{
newMP.X = e.X;
newMP.Y = e.Y;
Point oldL = new Point(this.Location.X,this.Location.Y);
Point newL = new Point(oldL.X+(newMP.X-oldMP.X),oldL.Y+(newMP.Y-oldMP.Y));
this.Location = newL;
}
}

private void Form2_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
oldMP.X = e.X;
oldMP.Y = e.Y;
MDown = true;
}

private void Form2_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
MDown = false;
}


foolnet 2005-04-24
  • 打赏
  • 举报
回复
我还真的不知道这些
学习
有意思
kqh0319 2005-04-24
  • 打赏
  • 举报
回复
学习.....
egxsun 2005-04-24
  • 打赏
  • 举报
回复
首先,为窗体添加一个私有域:

private System.Drawing.Point mousePoint;

然后,为窗体添加鼠标按下事件处理方法(我这里是MainForm_MouseDown,别忘了将该方法链接到MainForm.MouseDown事件,这不用多说了吧?):

private void MainForm_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) {
if(e.Button == MouseButtons.Left) {
this.mousePosition.X = e.X;
this.mousePosition.Y = e.Y;
}
}

在这里注意对鼠标按键进行筛选。

接下来,为窗体添加鼠标移动事件处理方法(我这里是MainForm_MouseMove):

private void MainForm_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) {
if(e.Button == MouseButtons.Left) {
Form.Top = Control.MousePosition.Y - mousePosition.Y
- SystemInformation.FrameBorderSize.Height - SystemInformation.CaptionHeight;
Form.Left = Control.MousePosition.Y - mousePosition.Y
- SystemInformation.FrameBorderSize.Width;
}
}

这里,如果窗体没有标题栏,可以去掉“-SystemInformation.CaptionHeight”;如果窗体没有边框,还可以去掉“-SystemInformation.FrameBorderSize.Height”和“-SystemInformation.FrameBorderSize.Width”。
wlovenet 2005-04-24
  • 打赏
  • 举报
回复

#region 实现不将鼠标放在标题栏上也可拖动窗体
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd,int wMsg,int wParam,int lParam);
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)//实现不将鼠标放在标题栏上也可拖动窗体
{
ReleaseCapture();
SendMessage(this.Handle,WM_SYSCOMMAND,SC_MOVE+HTCAPTION, 0);
}
#endregion
delphiseabird 2005-04-24
  • 打赏
  • 举报
回复
我看 一楼就可以,你要是需要QQ那样,鼠标移开自动隐藏,就自己处理一下鼠标消息 调整窗体的位置
wjcking 2005-04-23
  • 打赏
  • 举报
回复
TopMost = true;
FormBorderStyle = FormBorderStyle.None;
Heister 2005-04-23
  • 打赏
  • 举报
回复
这么简单,还好意思问
gyf168 2005-04-23
  • 打赏
  • 举报
回复
TopMost = true;
FormBorderStyle = FormBorderStyle.None;
再弄个背景基本就挺像了
考虑半透明的话再设一下Opacity
badboy168 2005-04-23
  • 打赏
  • 举报
回复
frm.TopMost = true;
zahuifan 2005-04-23
  • 打赏
  • 举报
回复
如果没有标题栏的话,拖动窗体得另写代码。思路是在窗体的鼠标移动事件中让窗体的坐标随鼠标的坐标的增减而变化。可惜相关代码没找到。
hujiiori 2005-04-23
  • 打赏
  • 举报
回复
up
JasonHeung 2005-04-23
  • 打赏
  • 举报
回复
frm.TopMost = true;

凨叔 2005-04-23
  • 打赏
  • 举报
回复
一楼的方法应该可以满足楼主需求了。
mmqingfeng 2005-04-23
  • 打赏
  • 举报
回复
TopMost = true;
FormBorderStyle = FormBorderStyle.None;
再弄个背景基本就挺像了
考虑半透明的话再设一下Opacity

111,093

社区成员

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

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

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