制作一个倒计时窗口

简介:   这一次我来讲解一个非常简单的倒计时效果(没太大技术含量,所以最初原文发于我的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);

 

 

目录
相关文章
|
JavaScript 前端开发 编译器
Vue3 :组合式写法入门
Vue3 :组合式写法入门
858 2
|
6月前
|
弹性计算 JavaScript 固态存储
2026年阿里云ECS新手入门指南:从零开始部署你的第一个应用
本文是作者基于两年阿里云ECS真实使用经验撰写的实战指南,涵盖选型建议、新手部署(含Node.js示例)、成本优化技巧,并附新用户专属优惠链接。内容客观实用,助力开发者低成本高效上云。(239字)
655 15
|
6月前
|
人工智能 JavaScript Linux
openclaw github installation guide:解析国内外用户如何选择模型
教程将详细讲解网关服务搭建、安全认证体系配置,以及与主流大模型的无缝对接方法,一站式解决私有化部署过程中的常见痛点。
|
8月前
|
安全 Linux 网络安全
Metasploit Framework 6.4.113 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.113 (macOS, Linux, Windows) - 开源渗透测试框架
375 5
Metasploit Framework 6.4.113 (macOS, Linux, Windows) - 开源渗透测试框架
|
10月前
|
存储 弹性计算 人工智能
阿里云服务器最新租用费用深度解析:轻量、ECS与GPU全价位测评
阿里云服务器租用费用多少钱1年?最新阿里云服务器租用费用优惠价格表,轻量2核2G轻量服务器一年68元,折合5.6元1个月,新老用户同享99元一年服务器,2核4G5M服务器ECS优惠价199元一年(企业专享),2核4G4M轻量服务器298元一年,4核8G服务器955元一年,4核16G10M服务器70元1个月、210元3个月,8核32G服务器160元1个月、480元3个月。本文深度解析阿里云轻量、ECS与GPU价格。阿里云云服务器配置可以选择2核2G3M、2核4G5M带宽、2核8G、4核8G、4核16G、8核16G、8核32G等配置可选。
|
11月前
|
弹性计算
阿里云服务器最便宜多少钱一年?到底是38元?还是68元1年?
阿里云新用户可抢38元/年的轻量应用服务器(2核2G、200M带宽、40G硬盘),每日限量抢购,非新用户可选99元/年的ECS经济型实例,配置更高且续费同价。
750 8
|
10月前
|
IDE Java 测试技术
2025 Java 开发者选型指南,谁更懂企业级工程?
在 Java 企业级开发领域,AI 编程工具的竞争已从“代码补全”升级为“工程效能”的比拼。2025年,随着通义大模型与文心大模型的迭代,通义灵码 与 文心快码 成为该领域的两大巨头。本文结合 IDC 报告与双 11 实战数据,从 Java 专项能力、云端协同 及 工程可控性 三个维度进行深度评测。
|
存储 IDE 开发工具
ESXi 8.0 中已弃用且不受支持的设备 (88172) | Devices deprecated and unsupported in ESXi 8.0
ESXi 8.0 中已弃用且不受支持的设备 (88172) | Devices deprecated and unsupported in ESXi 8.0
669 19
|
Serverless
数学建模——确定性时间序列分析方法(一)
数学建模——确定性时间序列分析方法
799 0

热门文章

最新文章