C#之打造气泡屏幕保护
真是越来越喜欢C#的强大和易用了,上次给大家介绍了一个C#打造QQ自动登录的小程序,这次再给大家介绍一个更好玩的小程序:气泡屏幕保护!首先说一下制作要点:1 窗口要全屏置顶 2 模拟气泡的滚动和粘滞效果 3 支持快捷键ESC退出
大致就是这3个要点了,其他还有一些细节我们在程序中根据需要再看,OK,开工!
首先是全屏置顶,因为是屏幕保护嘛,这个简单,在窗体的属性设置里把FormBorderStyle设置为none表示无边框,把ShowInTaskbar设置为false表示不在任务栏出现,最后一个把WindowState设置为Maximized表示最大化即可,当然可以设置TopMost为true让窗口置顶,不过这个不是绝对的,如果有其他窗口也使用TopMost的话会让我们失去焦点,所以我们要注册一个快捷键让程序可以退出!
模拟气泡我们可以用Graphics类中的DrawEllipse方法来画一个圆,当然这个圆我们可以指定不同的颜色和大小,这里重点讲一下怎么模拟粘滞效果!
所谓粘滞效果相信大家到知道,胶体大家都见过吧?就是类似胶体那种有弹性并且可以在改变形状后回复原型的那种效果,当然这里要想模拟这个效果只能说是稍微类似,DrawEllipse方法中最后两个参数表示圆的大小,我们可以在这里做文章,由于循环的速度很快,我们只要动态改变圆的大小就可以产生类似粘滞的效果,当然这个改变大小的参数不能太大,否则就无效了!
我们在onpaint事件中写入如下代码来绘制一些圆:
01.
Random ra =
new
Random();
//初始化随机数
02.
bmp =
new
Bitmap(ClientSize.Width,ClientSize.Height, e.Graphics);
03.
Graphics bmpGraphics = Graphics.FromImage(bmp);
04.
// 绘制圆形
05.
for
(
int
i=1;i<=13;i++)
//这里绘制13个圆形
06.
{
07.
bmpGraphics.DrawEllipse(
new
Pen(Color.FromName(colours[i]),2),
//根据事先定义好的颜色绘制不同颜色的圆
08.
ballarray[i, 1], ballarray[i, 2], 70+ra.Next(1, 10), 70+ra.Next(1, 10));
09.
//注意上面的最后两个参数利用随机数产生粘滞效果
10.
}
11.
e.Graphics.DrawImageUnscaled(bmp, 0, 0);
12.
bmpGraphics.Dispose();
13.
bmp.Dispose();
//这里是非托管的垃圾回收机制,避免产生内存溢出
这样,通过以上代码就可以绘制出一些不同颜色的具有粘滞效果的圆来模拟气泡
下面是注册系统热键,有个API函数RegisterHotKey可以完成系统快捷键的注册,使用他之前我们要先引用一个系统的DLL文件:USER32.DLL,然后对这个RegisterHotKey函数进行一下声明:
1.
[DllImport(
"user32.dll"
)]
//引用USER32.DLL
2.
public
static
extern
UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk);
//声明函数原型
由于引用了一个DLL文件,我们不要忘了在文件头加入DLLImport的类声明using System.Runtime.InteropServices;然后在Form1的构造函数中来注册一个系统热键,这里我们注册ESC:RegisterHotKey(this.Handle, 247696411, 0, (UInt32)Keys.Escape); 通过以上步骤,我们就可以注册一个或多个系统热键,但是,注册系统热键后我们还不能立即使用,因为我们在程序中还无法对这个消息进行响应,我们重载一下默认的WndProc过程来响应我们的热键消息:
01.
protected
override
void
WndProc(
ref
Message m)
//注意是保护类型的过程
02.
{
03.
const
int
WM_HOTKEY = 0x0312;
04.
}
05.
if
(m.Msg == WM_HOTKEY & & m.WParam.ToInt32() == 247696411)
//判断热键消息是不是我们设置的
06.
{
07.
Application.Exit();
//如果消息等于我们的热键消息,程序退出
08.
}
09.
base
.WndProc(
ref
m);
//其他消息返回做默认处理
好了,通过以上一些步骤,我们就基本完成了这个屏幕保护程序的要点设计,其他的详细过程可以参考源码,程序运行的时候背景是透明的,这个也不难实现
1.
this
.BackColor = System.Drawing.Color.FromArgb(((
int
)(((
byte
)(255)))), ((
int
)(((
byte
)(192)))), ((
int
)(((
byte
)(192)))));
2.
this
.TransparencyKey = System.Drawing.Color.FromArgb(((
int
)(((
byte
)(255)))), ((
int
)(((
byte
)(192)))), ((
int
)(((
byte
)(192)))));
TransparencyKey可以让窗体的某个颜色透明显示,我们只要把窗体的颜色和TransparencyKey的颜色设置一致就可以了,这里我设置的是粉红,注意最好设置的颜色是窗体所没有的,否则一旦匹配将会以透明显示!
完整源程序下载:http://www.zystudios.cn/cn/uploadsoft/AnimatBall.zip
转载于:https://www.cnblogs.com/lzjsky/archive/2011/09/22/2184830.html
C#之打造气泡屏幕保护相关推荐
- 计算机主题和桌面背景区别,xp系统主题,桌面背景,屏幕保护,分辨率等技巧设置...
XP系统是大家平时用的最多的,通过对XP显示技巧设置,可以打造自己的个性化电脑桌面,一般来说设置的多的是系统主题,桌面背景,屏幕保护程序,分辨率设置,屏幕刷新率这些. 1.电脑主题设置:首先 右击电脑 ...
- w7计算机屏幕保护设置方法,W7屏保怎么设置
w7屏保怎么设置?w7电脑系统中的屏幕保护程序一般是从桌面右键进入的,但很多用户使用的是w7家庭版电脑系统,右键没有个性化设置,这种情况只能从控制面板中进入,至于如何设置屏幕保护,相信用户进入之后就懂 ...
- html文件设置成mac屏保,Mac怎么设置屏幕保护?如何设置Mac屏幕保护程序?
Mac电脑如何设置屏幕保护程序?屏保是我们显示个性的重要途径,也是保护我们的电脑安全的一个重要方法.MAC用户想要修改自己的屏保该怎么办呢?今天PC6小编就教大家如何在Mac系统下设置桌面背景以及屏幕 ...
- 询问HTG:白噪声屏幕保护程序,有效的文件命名以及从密码泄露中恢复
Once a week we share three of the questions we've answered from the Ask HTG inbox with the greater r ...
- centos 去除屏幕保护
2019独角兽企业重金招聘Python工程师标准>>> CentOS系统在用户闲置一段时间(默认为5分钟)后,会启动屏幕保护程序(默认的屏保为黑屏),并要求重新输入密码才能回到原来的 ...
- 计算机如何自动屏幕保护,怎样设置屏保
2008-09-01 我叔叔机器拿回来后,设置了个新的用户,没有设置密码,原来用户有密码的,删除不了,重新开机后,新用户自动出来用密码登陆,我们试过老密码,但是不行,这个账号没有设置密码啊~~~~~~ ...
- JS+CSS打造随屏幕滚动的quick快速导航代码
代码内容: <html> <head> <title>JS+CSS打造随屏幕滚动的quick快速导航代码_网页代码站(www.webdm.cn)</title ...
- 计算机桌面保护怎么办,电脑屏幕保护怎么设置
笔者收集有一些经典的动态屏保,比如时钟屏保.泡泡屏保.海底世界动态屏保等.挨个用久了也就看腻了.这不闲来无事,就自己制作电脑屏保来玩儿了.网上制作电脑屏保制作软件还蛮多,各有优缺点吧.最近淘了一个,献 ...
- windows xp 屏幕保护程序_小礼物:3D Windows XP 屏幕保护程序
航通社旗下公众号"56K小猫"(微信:modem56k),原创文章未经授权禁止转载.航通社微信:lifeissohappy 微博:@航通社 生 / 活 / 小 / 妙 / 招 从昨 ...
最新文章
- 1.mysql数据库安装不成功的解决方案
- JavaScript中Map的应用及Map中的bug
- SQL中基于代价的优化
- IE浏览器高级设置如何还原
- iPhone SE 2渲染图再曝光:已加入浴霸摄像头豪华套餐
- 嵌入式数据库SQLite的编译、安装和使用[ZT]
- Maven generate/构建项目太慢解决方法
- PySide 简易教程二-------工欲善其事,必先利其器
- TensorFlow工作笔记001---Centos7.3下安装TensorFlow最新版本,基于python2.7.5的,没有编译TensorFlow的源码
- 惠普企业(HPE)是否免不了最终被关停的命?
- gdb 调试 入手 实例讲解-转
- 使用vue自定义组件以及动态时间
- 腾讯广点通DMP广告数据提交回传对接方法解析
- macOS 访达的隐藏小技巧
- 一. 英语语法 - 简单句
- 去除警告 ArrayList is a raw type
- ImageList 导出文件
- 手把手教你如何快速发表论文(干货)
- Spark学习总结以及问题
- C#2.0 编写window服务