现在的位置: 首页 > 综合 > 正文

C# 迅雷,flash 悬浮窗体

2013年08月22日 ⁄ 综合 ⁄ 共 2996字 ⁄ 字号 评论关闭

有时候用迅雷,flash那种悬浮窗做一些信息提示效果还是不错的,所以写一个简单的demo给大家,仅供参考。

实现了不规则窗体绘制,实现了不获取焦点,实现了总是显示在前面,实现了文本显示,实现拖拽功能。

注意:test.bmp是一个位图文件,背景色为(255,0,255)玫瑰红色,中间可以用其他颜色绘制要显示的窗体形状,例如我是用圆角矩形画了个黑色实体框,作为显示窗口。

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Runtime.InteropServices;

namespace TaskbarNotifierDemo
{
    public partial class Form2 : Form
    {
        private Point mouseOffst;
        private bool isMouseDown = false;
        protected Rectangle WorkAreaRectangle;

        [DllImport("user32.dll")]
        private static extern Boolean ShowWindow(IntPtr hWnd, Int32 nCmdShow);

        public Form2()
        {
            InitializeComponent();
        }

        public void ShowWithOutFocus()
        {
            WorkAreaRectangle = Screen.GetWorkingArea(WorkAreaRectangle);
            Bitmap backgroundImage = new Bitmap("test.bmp");
            Color transparencyColor = Color.FromArgb(255, 0, 255);
            Width = backgroundImage.Width;
            Height = backgroundImage.Height;
            BackgroundImage = backgroundImage;
            Region = BitmapToRegion(backgroundImage, transparencyColor);

            //SetBounds(Region);
				
            ShowWindow(this.Handle, 4);
        }

        private void MainForm_MouseDown(object sender, MouseEventArgs e)
        {
            int xOffset;
            int yOffset;

            if (e.Button == MouseButtons.Left)
            {
                xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
                yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
                mouseOffst = new Point(xOffset, yOffset);
                isMouseDown = true;
            }
        }

        private void MainForm_MouseLeave(object sender, EventArgs e)
        {
        }
        
        public string strText = "aaaaaaaaaaaaaaaaaa";

        private void MainForm_MouseMove(object sender, MouseEventArgs e)
        {
            if (isMouseDown)
            {
                Point mousePos = Control.MousePosition;
                int a = Screen.PrimaryScreen.WorkingArea.Height;
                int b = Screen.PrimaryScreen.Bounds.Height;

                int c = Screen.PrimaryScreen.WorkingArea.Width;
                int d = Screen.PrimaryScreen.Bounds.Width; 

                mousePos.Offset(mouseOffst.X+4, mouseOffst.Y+(b-a)/2);
                Location = mousePos;
            }
        }

        private void MainForm_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                isMouseDown = false;
            }
        }
        private void Form2_Load(object sender, EventArgs e)
        {
           
        }

        protected Region BitmapToRegion(Bitmap bitmap, Color transparencyColor)
        {
            if (bitmap == null)
                throw new ArgumentNullException("Bitmap", "Bitmap cannot be null!");

            int height = bitmap.Height;
            int width = bitmap.Width;

            GraphicsPath path = new GraphicsPath();

            for (int j = 0; j < height; j++)
                for (int i = 0; i < width; i++)
                {
                    if (bitmap.GetPixel(i, j) == transparencyColor)
                        continue;

                    int x0 = i;

                    while ((i < width) && (bitmap.GetPixel(i, j) != transparencyColor))
                        i++;

                    path.AddRectangle(new Rectangle(x0, j, i - x0, 1));
                }

            Region region = new Region(path);
            path.Dispose();
            return region;
        }

        private void Form2_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            StringFormat sf = new StringFormat();
				sf.Alignment = StringAlignment.Near;
				sf.LineAlignment = StringAlignment.Center;
				sf.FormatFlags = StringFormatFlags.DirectionRightToLeft;
				sf.Trimming = StringTrimming.EllipsisCharacter;				// Added Rev 002
                
            g.DrawString(strText, new Font("Arial",12,FontStyle.Bold,GraphicsUnit.Pixel), new SolidBrush(Color.White), new Rectangle(10,10,50,50),sf);
            e.Graphics.DrawRectangle(Pens.White, Rectangle.Round(new Rectangle(10, 10, 50, 50)));

        }
    }
}

 

抱歉!评论已关闭.