制作一个倒计时窗口

简介:   这一次我来讲解一个非常简单的倒计时效果(没太大技术含量,所以最初原文发于我的QQZone中)。它的应用场景是这样的,它是一个“全局”性质的提醒,以一种醒目的方式告知用户某个重要事件即将发生,同时不打断用户的当前操作。

  这一次我来讲解一个非常简单的倒计时效果(没太大技术含量,所以最初原文发于我的QQZone中)。它的应用场景是这样的,它是一个“全局”性质的提醒,以一种醒目的方式告知用户某个重要事件即将发生,同时不打断用户的当前操作。视觉效果是在屏幕的正中间显示一个正在倒数的数字,如下:

    

 

  

  然后我们随便用VC创建一个win32应用程序项目,倒计时的数字实际上是用一个窗口来呈现的,也就是在程序中的一个对话框。因此在资源中插入一个对话框,删除掉对话框上的任何控件,然后设置它的属性为 toolwindow,边框为 none。

 

  我们可以使用 GDI 在窗口上绘制出倒计时的数字,如果像我一样想要追求更漂亮点的显示效果,我使用了自定义的图片,包括两张位图,一个是绘制了0~9所有我们需要的数字的图片,另一个是窗口的背景(边框)。如下图所示(图片有所缩小):

 

  背景:  

  数字:

  

  倒计时窗口需要有以下窗口样式:

   

  WS_EX_TOOLWINDOW: 这个可以在设置窗口属性中打钩设置好。toolwindow的本意通常是指那些可以浮动的工具栏窗口,它们的特点是标题栏比普通窗口要窄,标题栏的标题字体也比普通窗口的标题字体小。最关键的特征是,这种窗口不会在任务栏上显示按钮,也不会出现在Alt-Tab窗口列表中。这正是我们需要这个样式的原因。 

 

  WS_EX_LAYERED: 图层窗口。这样我们就可以指定窗口的透明度和透明色。比如背景位图中的圆角处我们使用洋红填充,这样窗口上具有透明色的地方就不会显示出来。同时可以设置窗口使它们具有半透明效果。

 

  WS_EX_TRANSPARENT: “透明”的窗口。这个透明不是说视觉上,而是在于鼠标事件上透明。也就是说,我们的窗口不希望接收鼠标事件,不希望拥有焦点,因为倒计时窗口仅仅用于显示信息,不希望干扰用户的正常操作(比如他们正在聊天或者编辑文档)。这样,鼠标在窗口上移动或者点击时,消息都将被发送到下面的窗口。

 

  WS_EX_TOPMOST: 顶层窗口。这个简单了,就是永远在最上面的窗口。这个属性我们本质上通过SetWindowPos API 函数设置上去。

 

 

  在原文中我还讲解了很多很基本的东西,比如函数中的 static 的局部变量, QQMUSIC的歌词窗口的实现等。由于这些东西很简单,就不详细陈列了。

以下是其中一条:

 

  假设有一个大矩形 rcBig,一个小矩形 rcSmall,我们把小矩形居中的放在大矩形中央,那么小矩形的左上角坐标(以大矩形的左上角为原点)是多少?答案是:

 

  left = (rcBig.width - rcSmall.widht) /2;

  top = (rcBig.height - rcSmall.height)/2;

  

  这个计算式在界面布局时经常用到。同理,在上面的绘制代码中我们也是用这种方法定位每个数字的左上角坐标的。也是用这个方法去设置窗口在屏幕上居中的。  

  下面我们补充一下源代码的下载连接:

  http://files.cnblogs.com/hoodlum1980/StretchBlt.rar

 

  ========================================

  补充一则:把一个 int 数字 n  格式化成16进制的字符串(前面补零成0位):

 

  例如,输入n=10,要求输出 0x0000000A;

 

  C++:  sprintf( buffer, "0x%08X", n);

  C#:    string s = string.Format( "0x{0:X08}", n);

 

 

目录
相关文章
|
12月前
|
图形学
|
4月前
|
Shell 开发工具 git
聊天功能演示系统发布后出现有些页面滚动与鼠标点击问题解决
聊天功能演示系统发布后出现有些页面滚动与鼠标点击问题解决
31 0
|
Python
飞机大战-创建窗口(1)
用Python编程,编写飞机大战-创建窗口。
51 0
倒计时功能制作
今天制作一个商城项目距离抢购还剩多长时间的一个小功能 首先要知道这个倒计时是不断的变化的,所以需要用到定时器来自动变化(setInterval),有三个标签存放时分秒,再利用innerHTML将计算出来的时间放入三个标签内,第一次执行也是间隔毫秒数,因此刷新页面会有空白,我们最好采取封装函数的方式,这样可以先调用一次这个函数,防止刚开始刷新页面有空白问题。
|
API C#
electron实现类似QQ来新消息时的闪烁与任务栏窗口提醒
公司项目有一款带即时聊天、群组功能的APP,因为要给客服人员使用,需要开发PC版本。之前使用C#开发过一个PC版本,但是C#的UI这一块支持的不太好,而且升级比较麻烦,我就牵头基于Electron去实现了一个PC版本。
3097 0
|
测试技术
clswindow使用案例:窗口图钉-窗口置顶(含源码)
clswindow使用案例:窗口图钉-窗口置顶(含源码)
245 0
clswindow使用案例:窗口图钉-窗口置顶(含源码)
|
前端开发 JavaScript
两步实现在网站左下角实现音乐播放器弹窗听歌
两步实现在网站左下角实现音乐播放器弹窗听歌
143 0
两步实现在网站左下角实现音乐播放器弹窗听歌
实现计时器和倒计时工具(Unity3D)
今天分享一下如何基于Unity3D做计时器工具,为了方便演示,使用了UGUI的Text,代码简单具有拓展性,然后有什么错误或者意见也欢迎大家给我提出来。微信二维码已经显示在博客主页,有想要沟通学习的,项目外包的都可以加一下。 分享一下我另一篇关于时间计时的文章: 【Unity3D】获取到游戏时间,并显示出来
|
iOS开发
iOS倒计时按钮闪烁问题解决
iOS倒计时按钮闪烁问题解决
145 0
|
前端开发 JavaScript 数据格式