控件–ProgressBar-WindowsAPI论坛-WindowsAPI-津桥芝士平台

控件–ProgressBar

使用WindowsAPI,创建ProgressBar控件:

#include <windows.h>
#include <commctrl.h>
#define TIMER_ID 1
#pragma comment(lib, "comctl32.lib")
HWND hwndProgressBar;
int c = 0;

// 声明窗口过程函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{
    switch (msg) 
    {
    case WM_CREATE:
        // 创建进度条
        hwndProgressBar = CreateWindowEx(
            0, PROGRESS_CLASS, nullptr,
            WS_CHILD | WS_VISIBLE | PBS_SMOOTH, 10, 10, 280, 20,
            hwnd, (HMENU)1, nullptr, nullptr);

        // 设置进度条范围和步长
        SendMessage(hwndProgressBar, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
        SendMessage(hwndProgressBar, PBM_SETSTEP, (WPARAM)1, 0);

        SetTimer(hwnd, TIMER_ID, 100, NULL);  // 10毫秒触发一次
        // 设置进度条的颜色
        break;

    case WM_TIMER: 
        if (wParam == TIMER_ID) 
        {
            // 增加进度条的步进值
            SendMessage(hwndProgressBar, PBM_STEPIT, c++, 0);
        }
        break;
    
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd, msg, wParam, lParam);
}

// 初始化窗口类和创建窗口
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 初始化公共控件
    INITCOMMONCONTROLSEX icc;
    icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icc.dwICC = ICC_PROGRESS_CLASS;
    InitCommonControlsEx(&icc);

    // 注册窗口类
    WNDCLASS wc = {};
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = L"ProgressBarWindowClass";
    wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);

    if (!RegisterClass(&wc)) 
    {
        MessageBox(nullptr, L"Window registration failed!", L"Error", MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    // 创建窗口
    HWND hwnd = CreateWindowEx(
        0, L"ProgressBarWindowClass", L"Progress Bar Control",
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 300, 200,
        nullptr, nullptr, hInstance, nullptr);

    if (hwnd == nullptr) 
    {
        MessageBox(nullptr, L"Window creation failed!", L"Error", MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, SW_SHOW);
    UpdateWindow(hwnd);

    // 消息循环
    MSG msg;
    while (GetMessage(&msg, nullptr, 0, 0)) 
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return static_cast<int>(msg.wParam);
}

效果图:

image

 

请登录后发表评论

    没有回复内容