用C#做一个悬浮窗口
2008-11-17 16:28
232 查看
转自:http://hi.baidu.com/hgluo/blog/item/88594fc2b3bb9235e5dd3b86.html
用C#做一个悬浮窗口[含三种移动无标题窗体的办法]
2006年08月24日 星期四 16:36
转自:http://hi.baidu.com/hgluo/blog/item/88594fc2b3bb9235e5dd3b86.html
用C#做一个悬浮窗口[含三种移动无标题窗体的办法]
2006年08月24日 星期四 16:36
今天看几个C#源码,再到愚翁专栏上看到了一篇类似的文章,自己就参考做了一个简单的程序,原来实现起来简单不过了! 第一步:建立一个窗体,设置其属性: this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.MaximizeBox = false; this.MinimizeBox = false; this.Opacity = 0.5; 第二步:设置窗体的OnLoad事件: private void Form2_Load(object sender, EventArgs e) { this.Top = 20; this.Left = Screen.PrimaryScreen.Bounds.Width - 80; this.Width = 60; this.Height = 60; } 第三步:修改窗体的Paint事件,美化界面,这里做一个渐变背景,需要引入System.Drawing.Drawing2D; private void Form2_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Color FColor = Color.Red; Color TColor = Color.Yellow; Brush b = new LinearGradientBrush(this.ClientRectangle, FColor, TColor, LinearGradientMode.ForwardDiagonal); g.FillRectangle(b, this.ClientRectangle); } 第四步:需要实现鼠标拖动悬浮窗体, const int WM_NCHITTEST = 0x0084; const int HTCLIENT = 0x0001; const int HTCAPTION = 0x0002; protected override void WndProc(ref System.Windows.Forms.Message m) { switch(m.Msg) { case WM_NCHITTEST: base.WndProc(ref m); if (m.Result==(IntPtr)HTCLIENT) m.Result=(IntPtr)HTCAPTION; break; default: base.WndProc(ref m); break; } } 关于这一步,愚翁 不是这样处理的,他是处理鼠标事件来实现的,效果差不多,也贴在这里学习一下吧: 先定义几个类成员变量: private Point ptMouseCurrrnetPos, ptMouseNewPos,ptFormPos, ptFormNewPos; private bool blnMouseDown = false; 再添加三个鼠标事件: private void Form2_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { blnMouseDown = true; // Save window position and mouse position ptMouseCurrrnetPos = Control.MousePosition; ptFormPos = Location; } } private void Form2_MouseMove(object sender, MouseEventArgs e) { if (blnMouseDown) { //Get the current position of the mouse in the screen ptMouseNewPos = Control.MousePosition; //Set window position ptFormNewPos.X = ptMouseNewPos.X - ptMouseCurrrnetPos.X + ptFormPos.X; ptFormNewPos.Y = ptMouseNewPos.Y - ptMouseCurrrnetPos.Y + ptFormPos.Y; //Save window position Location = ptFormNewPos; ptFormPos = ptFormNewPos; //Save mouse position ptMouseCurrrnetPos = ptMouseNewPos; } } private void Form2_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) //Return back signal blnMouseDown = false; } 第三种移动无标标题窗体的办法: 通过API来处理,需要引入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; private void Form2_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { ReleaseCapture(); SendMessage(this.Handle,WM_SYSCOMMAND,SC_MOVE+HTCAPTION, 0); } 呵,这个看起来好像比较“正统”。 |
相关文章推荐
- 如何用C#做一个悬浮窗口程序
- [愚翁专栏]如何用C#做一个悬浮窗口程序
- 如何用C#做一个悬浮窗口程序
- 如何用C#做一个悬浮窗口程序
- 如何用C#做一个悬浮窗口程序
- 用C#做一个悬浮窗口[含三种移动无标题窗体的办法]
- 如何用C#做一个悬浮窗口程序
- c#中在DataGrid里创建一个弹出式窗口------可实现源代码
- c#中在DataGrid里创建一个弹出式窗口------可实现源代码
- c#中 一个窗口中需要使用另一个窗口中的控件名称
- C#同一窗口通过一个按键切换显示不同画面
- 如何用C#写一个简单的Login窗口
- Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现
- C# 实现MDI子窗体只打开一个(打开新的窗口,关闭其他窗口)
- 如何弹出一个模式窗口来显示进度条[c#]
- c#中如何打开一个新窗口并且 关闭当前的窗口
- 在C#中怎么设置一个全局变量,方便我在其他的窗口中可以调用
- C#中出现了一个问题,就是程序主窗体已经打开,在调用子窗体时候出现了创建窗口句柄时出错。
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口