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

boyanx2个月前技术教程10

一、开发准备与效果预览

**开发工具**: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配置说明文档!

标签: 倒计时代码

相关文章

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

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

100行Html5+CSS3+JS代码实现元旦倒计时界面

一、前言2022年到了,祝大家虎年大吉喜气临,昂首摆尾迎春来。双眼圆睁看世界,万水千山尽开颜。胡须翘翘美姿态,人人开心祝平安。巨大身躯摇摆摆,坎坷困境当笑谈。愿你虎年万事顺,吉星高照旺旺旺!二、202...

代码情书

我缩在电竞椅里抠脚改代码的时候,绝对想不到三十秒后会和全平台最火的网红接吻。"林深!你写的破程序把夏栀直播间搞崩了!"总监的咆哮震得耳麦都在抖。我手一抖按下F5,直播间突然切到我的摄像...

倒计时:11小时7分

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

js和vue实现时分秒倒计时的方法

我们平常浏览网页的时候,经常见到“距游戏公测1天2小时3分钟4秒”这样的倒计时器。像切图网qietu.com经常就遇到要做倒计时的效果,干脆记录下来,免得重复造轮子。下面两个 demo 将分别用纯 J...

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

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

发表评论    

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