使用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);
}
效果图:
没有回复内容