利用Acllib写的一个桌面时钟

关于Acllib的一点介绍:

  1. Acllib是一个基于Win32API的函数库,提供了相对较为简单的方式来做Windows程序。
  2. 实际提供了⼀个.c和两个.h,可以在MSVC和Dev C++( MinGW)中使用。
  3. 纯教学用途,但是编程模型和思想可以借鉴

下面是我利用acllib做的一个桌面小时钟,并且增加了一个“没用的”事件处理。

↓↓↓↓时钟长这个样子↓↓↓↓

这里写图片描述

首先是acllib的程序入口,Setup 函数:

int Setup()
{
    // 初始化窗口参数分别是窗口名称,起始点的x,y坐标,窗口的x,y尺寸
    initWindow("MyWindow", DEFAULT, DEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT);

    // 注册键盘事件
    registerKeyboardEvent(keyEvent);
    // 注册时间事件
    registerTimerEvent(timerEvent);
    // 这里是为了事件按键事件处理增加的一个标志量,后面会讲为什么
    timerflag = TIMER_working;
    // 定时器开始工作,
    startTimer(0, 20);

    // 程序初始化完成,进入消息循环,开始工作
    return 0;
}

这里要提一下windows api的工作流程,大致如下图所示:

这里写图片描述

程序开始工作时就进入了消息循环(也就是setup结束),我们可以看到在消息循环中要循环调用各种事件函数,这里主要有三种事件:

1. 鼠标
2. 键盘
3. 定时器

这里要做一个时钟,那么第一个要用到的就是定时器事件,从上面的代码可以看到,定时器的工作模式就是在Setup中注册定时器事件,每次时钟“tick”一下,就发生一次定时器事件也就是调用你所注册的定时器事件函数。这里我们的函数作用是每20ms,刷新一次画面,也就是重画整个钟表。

下面看一下画钟表的函数:

void picture_a_minute(int tid)
{
    int x, y;
    // 获取表中心点坐标
    int cntX = getWidth()/2, cntY = getHeight()/2;
    // 表盘半径
    int r_dial = DIAL_RADIUS;
    // 计算刻度大圆和小圆半径
    int r = (double)r_dial/15, r2 = (double)r_dial/25;
    // 计算时针分针秒针的长度
    int r_sec = (double)r_dial * 4<
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值