C#悬浮窗口 图像背景

news/2024/11/28 11:45:06/

一 悬浮窗口

特点:
① 窗口一般较小,有时为不规则背景;
② 置顶显示;
③ 窗口支持拖动;
④ 一般用于程序状态显示,比如显示下载进度;
⑤ 一般支持右键菜单、拖拽操作等;

二 创建悬浮窗口

特点:
① 窗口一般较小,有时为不规则背景;
② 置顶显示;
③ 窗口支持拖动;
④ 一般用于程序状态显示,比如显示下载进度;
⑤ 一般支持右键菜单,拖拽操作等;

1 实现细节:

① 无边框FormBorderStyle:Noe;
② 置顶显示TopMost:true;
③ 显示位置StartPosition:Manual自由指定;

2 细节

对应Form来说先Show,后设置大小和位置
floatBox=new myFloatBox();
floatBox.Owner=this;
floatBox.Show();
floatBox.Bounds=new Rectangle(0,0,100,100);

三 圆形背景

① 窗口一般较小,有时为不规则背景;
② 置顶显示;
③ 窗口支持拖动;
④ 一般用于程序状态显示,比如显示下载精度;
⑤ 一般支持右键菜单、拖拽操作等;

代码实现:
① 添加一个正方形的图片资源;
② 绘制圆形图片;
③ 将外围白色区域设为透明;
④ 绘制一个蒙版,确保中间区域没有白色像素点;
子窗体

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 圆形背景
{public partial class FloatingWindow : Form{private Image image;public FloatingWindow(){this.FormBorderStyle = FormBorderStyle.None;//无边框this.StartPosition = FormStartPosition.Manual;//手工指定位置this.ShowInTaskbar = false;//在任务栏不显示图标this.TopMost = true;//置顶显示this.BackColor = Color.White;//背景色this.TransparencyKey = Color.White;//指定透明区域的颜色this.SetStyle(ControlStyles.UserPaint, true);this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);}protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);Graphics g = e.Graphics;int w = this.Width, h = this.Height;Rectangle rect = new Rectangle(0, 0, w, h);rect.Inflate(-2, -2);//平滑绘制,反锯齿g.SmoothingMode = SmoothingMode.HighQuality;g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;//绘制一个圆形的图片if(true){GraphicsPath path = new GraphicsPath();int radius = rect.Width / 2;int x = w / 2 - radius;int y = h / 2 - radius;path.AddEllipse(new Rectangle(x, y, radius * 2, radius * 2));//设置剪辑区域Region oldClip = g.Clip;g.Clip = new Region(path);//绘制图像(Clip区域之外的部分不会显示)if(this.image!=null){Console.WriteLine("图像:" + image.Size);Console.WriteLine("位置" + this.Size);g.DrawImage(image, rect);}//覆盖一层蒙版,确保纯白色像素点不会出现,因为纯白色是透明色Brush brush = new SolidBrush(Color.FromArgb(10, 255, 255, 255));g.FillRectangle(brush, rect);brush.Dispose();g.Clip.Dispose();g.Clip = oldClip;//恢复Pen pen = new Pen(Color.LightBlue);g.DrawPath(pen, path);pen.Dispose();}}public Image Image{get { return this.image; }set { this.image = value;this.Invalidate();}}}
}

父窗体

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 圆形背景
{public partial class Form1 : Form{FloatingWindow floatingWindow;public Form1(){InitializeComponent();floatingWindow=new FloatingWindow();floatingWindow.Show();floatingWindow.Bounds = new Rectangle(0, 0, 100, 100);//设置悬浮窗口的背景图片floatingWindow.Image = Properties.Resources.XiaoWu;}protected override void OnFormClosing(FormClosingEventArgs e){base.OnFormClosing(e);floatingWindow.Dispose();}}
}

http://www.ppmy.cn/news/1674.html

相关文章

每日一题:斐波那契数列

每日一题:斐波那契数列 我们先来看一下斐波那契数列的定义: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而…

多线程 3

多线程 3 : 文章目录1.线程安全2. 产生线程安全的原因3. synchronized - 加锁操作4.可重入5.死锁问题6. volatile 关键字7.wait 和 notify1.线程安全 为啥会出现线程安全 ?   罪魁祸首,还是多线程的抢占式执行, 正因为抢占式执行&#xff0c…

推荐一款语音识别软件

一、简介 使用接口转换需要输入的语音为文字。 给大家带来一款语音识别软件,想做智能识别语音设备或者想给项目增加功能的同学可以看下 这款软件是使用python写的,其实开发语言无所谓用其他语言也可以写 代码还是挺简单的。 这款软件主要使用接口完成识…

cubeIDE开发,结合汉字取模工具,在LCD输出各种字体

一、汉字取模工具 嵌入式LCD屏显示无非就是不间断刷新LCD宽度*LCD高度的像素矩阵,并为每个像素指定特定颜色。对于LCD屏幕显示汉字,无非就是将字体形状转换为字体宽度*字体高度的像素矩阵,及指定每个字体像素的颜色,然后在LCD屏幕…

应用 Serverless 化,让业务开发心无旁骛

我们希望让用户做得更少而收获更多,通过Serverless化,用云就像用电一样简单。”张建锋表示,Serverless 让云计算从一种资源真正变成一种能力,未来云将全面 Serverless 化,更加接近“电网”模式,按计算的调用…

蚂蚁面试官:Zookeeper 的选举流程是怎样的?我当场懵逼了

​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 面试经常会遇到面试官问 Zookeeper 的选举原理,我心想,问这些有啥用吗?又不要我造火箭! 每次面试也只知道个大概,并没有深究…

股市资讯天宇优配|政策利好叠加竞争格局向好 机构做多建材板块

近来,受房地产板块上涨带动,建材板块也敞开一轮反弹行情,东方雨虹、三棵树、科顺股份等体现抢眼。在组织看来,房地产职业近期利好政策频出,商场对建材职业后期需求的忧虑将会消解。另一方面,在过去一年多的…

基于Android的学生信息管理App设计(Android studio开发)

目 录 一、 题目选择(题目、选题意义) 3 二、 设计目的 3 1、 初衷 3 2、 结合实际 3 3、 使用工具 3 三、 最终页面效果展示 4 1、 登陆界面 4 2、 主界面 5 3、 各个功能模块 6 四、 各部分设计 11 1、活动页面Activity布局文件 11 2、Activity的编程 …