一、开发准备与效果预览
**开发工具**:VS2022 + Windows SDK
**最终效果**:
- 透明悬浮窗倒计时
- 快捷键控制(F5开始/暂停)
- 蜂鸣器提醒
- 实时剩余时间显示
二、完整代码(原创实现)
```c
#include
#include
// 全局变量
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配置说明文档!