Windows计时器开发:C语言实现悬浮倒计时(附源码)

boyanx8个月前技术教程22

一、开发准备与效果预览

**开发工具**:VS2022 + Windows SDK

**最终效果**:

- 透明悬浮窗倒计时

- 快捷键控制(F5开始/暂停)

- 蜂鸣器提醒

- 实时剩余时间显示


二、完整代码(原创实现)

```c

#include <windows.h>

#include <stdio.h>


// 全局变量

HWND hWnd;

int isRunning = 0;

int seconds = 0;


// 窗口消息处理

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {

switch(msg) {

case WM_CREATE: {

// 创建半透明窗口

SetWindowLong(hWnd, GWL_EXSTYLE, WS_EX_LAYERED);

SetLayeredWindowAttributes(hWnd, 0, 180, LWA_ALPHA);

// 创建文字标签

CreateWindow("STATIC", "00:00:00",

WS_VISIBLE | WS_CHILD,

10, 10, 200, 50, hWnd, NULL, NULL, NULL);

return 0;

}

case WM_KEYDOWN:

if (wParam == VK_F5) { // F5控制开关

isRunning = !isRunning;

}

break;

case WM_DESTROY:

PostQuitMessage(0);

return 0;

}

return DefWindowProc(hWnd, msg, wParam, lParam);

}


// 定时器回调

VOID CALLBACK TimerProc(HWND hWnd, UINT msg, UINT idTimer, DWORD dwTime) {

if (isRunning && seconds > 0) {

seconds--;

// 更新显示

char timeStr[9];

sprintf(timeStr, "%02d:%02d:%02d",

seconds/3600, (seconds%3600)/60, seconds%60);

SetWindowText(GetDlgItem(hWnd, 1), timeStr);

// 倒计时结束提醒

if (seconds == 0) {

MessageBeep(MB_ICONWARNING);

isRunning = 0;

}

}

}


// 主函数

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

// 注册窗口类

WNDCLASS wc = {0};

wc.lpfnWndProc = WndProc;

wc.hInstance = hInstance;

wc.lpszClassName = "CountdownTimer";

RegisterClass(&wc);


// 创建无边框窗口

hWnd = CreateWindowEx(WS_EX_TOPMOST, "CountdownTimer", "Timer",

WS_POPUP | WS_VISIBLE,

100, 100, 220, 80, NULL, NULL, hInstance, NULL);


// 设置定时器

SetTimer(hWnd, 1, 1000, TimerProc); // 1秒间隔


// 输入初始时间

seconds = 3600; // 默认1小时

// 消息循环

MSG msg;

while (GetMessage(&msg, NULL, 0, 0)) {

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return 0;

}

三、代码核心解析

1. **窗口透明技术**:

```c

SetWindowLong(hWnd, GWL_EXSTYLE, WS_EX_LAYERED);


SetLayeredWindowAttributes(hWnd, 0, 180, LWA_ALPHA); // 180=半透明值

```


2. **键盘响应机制**:

```c

case WM_KEYDOWN: // 捕获全局热键

if (wParam == VK_F5) isRunning = !isRunning;

```


3. **精准定时原理**:

```c

SetTimer(hWnd, 1, 1000, TimerProc); // 使用Windows系统计时器

```


四、编译运行步骤

1. 在VS2022新建**Windows桌面应用**项目

2. 粘贴代码后修改配置:

- 链接器 → 系统 → 子系统改为**Windows (/SUBSYSTEM:WINDOWS)**

3. 按F5编译运行(默认生成32位程序)


五、功能扩展建议

1. 增加时间设置对话框(`CreateDialog`函数)

2. 添加任务栏托盘图标(`Shell_NotifyIcon`)

3. 支持多计时器并行(多线程+数组管理)


**互动话题**:

"你最希望这个计时器添加什么功能?点击关注并在评论区写下你的创意,点赞最高的需求下期实现!"

#windows开发##C语言##系统编程##开源项目##效率工具#

关注获取完整项目文件+VS配置说明文档!

标签: 倒计时代码

相关文章

Python进阶-Day 10 :时间与日期处理

一、学习目标掌握 Python 中 datetime 和 time 模块的基本用法。理解时间戳、日期格式化和时间计算的相关概念。能够编写一个简单的倒计时程序,应用所学知识。二、学习内容与时间安排上午(...

再挑战,用AI助手15分钟开发倒计时工具!家长上班族必备神器

前天用Cursor结合Deepseek做了一个倒计时工具,花了30分钟,今天再挑战用Vscode+通义灵码完成。没想到仅用15分钟就完成了专业级工具开发!现将完整对话过程分享给大家,见证AI编程的神奇...

《末日代码》

核战倒计时第7小时,我破解了五角大楼的量子加密文件。"阻止发射的密码是...KFC-CRAZY-THURSDAY-VME50?"实验室的警报红光中,我盯着全息投影上的乱码。太平洋深处的...

公司电脑自动群发裸聊:代码溯源到已故程序员38

公司电脑群发裸聊视频那事是我捅出来的。早上九点刚摸进技术部办公室,键盘声噼里啪啦响得跟放鞭炮似的。王胖子突然嗷一嗓子,说全集团电脑都在自动往外发黄色视频。我冲过去扒拉他电脑,后台代码里明晃晃挂着...

倒计时:11小时7分

艾登在沥青里呼吸。 他的鼻腔灌满冰冷的原油,却闻到1948年波本威士忌的味道。睁开眼时,自己正坐在老式巡逻车里,仪表盘泛着铜绿,后视镜挂着的十字架逆时针旋转。挡风玻璃外是黑白电影质感的街道,穿呢子大衣...

用deepseek生成一个电脑端倒计时小程序

近期公司要举办一个工作会议,为了更好的提醒讲者时间,要求小编找到一款桌面倒计时程序,网上搜寻无果,于是灵机一动,抱着试一试的心态打开了deepseek,结果误打误撞生成了满足使用的小程序,不得不感叹A...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。