ACLLib库制作时钟

ACLLib库是一个简单的封装win32API,方便制作简易GUI,纯教学用途,浙江大学编写。还不明白ACLLib库是什么的可以看看: ACLLib库是什么

如果让你用ACLLib库来做一个小程序,你会做什么呢?也许你想想也不知道做什么,会认为库提供的函数太少,其实不然ACLLib库提供了很多有用的函数,比如绘图、声音、贴图、各种事件,还可以控制台与窗体同时并存。

好了下面来讲今天自己用ACLLib库制作的一个小程序,小时钟。下面图就是最终效果的小时钟。制作动图只录了几十秒钟,如要小时钟执行档,文章最后会有下载链接。

ACLLib库制作时钟

接下来讲解下如何用ACLLib库设计一款这样的小时钟,具体用到的知识有旋阵矩阵、平移矩阵、角度弧度转换、时间获取函数localtime_s、结构tm。ACLLib库里用的函数有initWindow、loadImage、registerTimerEvent、startTimer、beginPaint、putImage、setPenColor、line、endPaint。

先分别讲下调用ACLLib库里的函数每个的作用

initWindow:初始化窗体大小设置为320*320,(320*320为时钟图片的大小)

loadImage:载入时钟贴图图片,贴图存在ACL_Image结构 中;

registerTimerEvent:注册时钟的时间事件,

startTimer:时钟的时间执行间隔时间,设1000ms也就是1s钟执行一次

beginPaint:ACLLib库规定开始绘画之前必须先调用函数,作一些初始化动作

endPaint:ACLLib库规定绘画结束后必须调用此函数,用于释放不用资源等

putImage:用于将载入的时钟图片贴到窗体中

setPenColor:设置画笔的颜色,用于设置时钟的时针、分针、秒针的颜色,时针、分针设成黑色,秒针设成红色。

line:用于画时钟的时针、分针、秒针三根针,三根针在时钟表盘中间的点是同一个(160,160)。针的另一端点要根据当前时间做计算得到。

接下来讲下时钟的设计逻辑和各针位置如何

逻辑部份:

时钟程序回调时间事件registerTimerEvent,一秒钟执行一次(贴图和三根针的绘制)。

时钟各针位置如何实现:

时钟表盘是一个圆形,走一圈360度,时钟盘上总共有60个小格,每一个格就是6度(360/60)。

下面举个例子来讲,例如当前时间:   10:42:21

秒针的角度为:21*6 = 126

分针的角度为:42*6 + 21/60*6 = 254.1

时针的角度为:10*30  +  42/60*30 +  21/3600*30 =   321.175

各个针在时间表盘上的角度确定后,就可以用旋阵矩阵、平移矩阵相结合来计算出每根针的位置。

double AngleToArc(const double& Angle) {
return Angle * 3.14159265358979323846 / 180;
}

void Rot(int orx, int ory, int& x, int& y, double& T) {
int xtemp = 0;
int ytemp = 0;

T = AngleToArc(T);

x -= orx;
y -= ory;

xtemp = x * cos(T) - y * sin(T);
ytemp = x * sin(T) + y * cos(T);

x = xtemp + orx;
y = ytemp + ory;
}

还有两点要注意:

1.数学函数cos各sin输入参数是弧度值,要记得角度转成弧度值AngleToArc

2.三根针的长度是不一样的,这个看下手表就知道了。

以上就是整个ACLLib库制作时钟的整个方案,相信看完的应该都会自己制作时钟,如果不会,以下也有源代码可以参考:

ACLLib库制作时钟源代码:

ACLLib时钟执行档下载地址:

链接:https://pan.baidu.com/s/1yK-fIk4LcpfMtgdCbRUMTg

提取码:sdgu


《ACLLib库制作时钟》上有2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注