开发最轻量级的Windows桌面时钟
学习笔记作者:admin日期:2025-05-27点击:203
摘要:使用C/C++和Win32 API开发一个无依赖、资源占用极低的Windows桌面时钟,并提供了完整的Visual Studio项目模板。
开发最轻量级的Windows桌面时钟
问题描述
用户希望开发一个最轻量级的Windows桌面时钟,要求无依赖、资源占用极低。
解决方案
推荐使用C/C++结合Win32 API进行开发,最终生成了一个独立的EXE文件。
实现步骤
- 使用Win32 API编写主程序逻辑。
- 创建一个Visual Studio项目,并添加主程序代码。
- 设置编译参数为Windows子系统。
- 生成的工程文件包括SimpleClock.sln、SimpleClock/目录下的SimpleClock.cpp和SimpleClock.vcxproj。
最终效果
运行后会显示一个窗口,实时更新当前时间。
完整代码示例
#include <windows.h>
#include <time.h>
const char CLASS_NAME[] = "SimpleClockWindowClass";
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    static HWND hLabel;
    switch (uMsg) {
        case WM_CREATE:
            hLabel = CreateWindow("STATIC", "",
                                  WS_VISIBLE | WS_CHILD | SS_CENTER,
                                  50, 30, 150, 30,
                                  hwnd, NULL, NULL, NULL);
            SetTimer(hwnd, 1, 1000, NULL);
            break;
        case WM_TIMER: {
            time_t now = time(0);
            struct tm ltm;
            localtime_s(<ltm, &now);
            char buffer[32];
            strftime(buffer, sizeof(buffer), "%H:%M:%S", <ltm);
            SetWindowText(hLabel, buffer);
            break;
        }
        case WM_DESTROY:
            KillTimer(hwnd, 1);
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASS wc = {};
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = CLASS_NAME;
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    RegisterClass(&wc);
    HWND hwnd = CreateWindowEx(
        0,
        CLASS_NAME,
        "Simple Clock",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 250, 150,
        NULL,
        NULL,
        hInstance,
        NULL
    );
    if (!hwnd)
        return 0;
    ShowWindow(hwnd, nCmdShow);
    MSG msg = {};
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}关键词
轻量级, Win32 API, C++, Visual Studio, 时钟