在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一,制作winform 窗体 窗体要做小一点,你见过500*500的悬浮框吗? 二,去掉边框和标题栏 this.FormBorderStyle = FormBorderStyle.None; 运行出来如下所示:
三,在窗体中拖放label 控件 因为准备在悬浮框中放置gif动画, labelex.AutoSize = false; labelex.Left = 0; labelex.Top = 0; labelex.Width = this.Width; labelex.Height = this.Height;
四,拖拉label事件 const int WM_NCHITTEST = 0x0084; const int HTCLIENT = 0x0001; const int HTCAPTION = 0x0002; private Point ptMouseCurrrnetPos, ptMouseNewPos, ptFormPos, ptFormNewPos; public bool blnMouseDown = false; [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; const int WM_NCLBUTTONDBLCLK = 0xA3; public const int WM_RBUTTONDOWN = 0x0204; public const int WM_LBUTTONDOWN = 0x0201; private void labelex_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { blnMouseDown = true; // Save window position and mouse position ptMouseCurrrnetPos = Control.MousePosition; ptFormPos = Location; } ReleaseCapture(); //SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); } private void labelex_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) //Return back signal blnMouseDown = false; } private void labelex_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; } } } 五,将窗体置于最顶端 将窗体属性TopMost = True,这样窗体就可以不被其他窗体覆盖,置于屏幕的最顶端了。
六,这样一个简单的悬浮框 就做好了。可以手动尝试一下。
|
请发表评论