ACLLib库是一个简单的封装win32API,方便制作简易GUI,纯教学用途,浙江大学编写。还不明白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
各个针在时间表盘上的角度确定后,就可以用旋阵矩阵、平移矩阵相结合来计算出每根针的位置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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
Effectively expressed indeed! ! aarp recommended canadian pharmacies
Thanks, Good information. buy generic viagra
You said it adequately! Cialis And Optic Neuropathy
Seriously loads of beneficial information! which kratom is like vicodin
Excellent tips. Thank you! furosemide 40 mg surdosage
Truly quite a lot of amazing tips! 100mg viagra without a doctor prescription
Thank you. I enjoy it! how to take viagra for maximum effect