开发最轻量级的Windows桌面时钟

学习笔记作者:admin日期:2025-05-27点击:31

摘要:使用C/C++和Win32 API开发一个无依赖、资源占用极低的Windows桌面时钟,并提供了完整的Visual Studio项目模板。

开发最轻量级的Windows桌面时钟

问题描述

      用户希望开发一个最轻量级的Windows桌面时钟,要求无依赖、资源占用极低。

解决方案

      推荐使用C/C++结合Win32 API进行开发,最终生成了一个独立的EXE文件。

实现步骤

  1. 使用Win32 API编写主程序逻辑。
  2. 创建一个Visual Studio项目,并添加主程序代码。
  3. 设置编译参数为Windows子系统。
  4. 生成的工程文件包括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, 时钟

上一篇      下一篇