2

如何在 win32api 中更新此进度条?你可以在这里找到完整的代码代码在这里

hProgress=CreateWindowEx(0, PROGRESS_CLASS, NULL,
                       WS_CHILD | WS_VISIBLE,
                  20, 20, 260, 17,
                  hwnd, NULL, g_hInst, NULL);
4

4 回答 4

4

您要查找的消息是PBM_SETPOS。它的使用取决于当前设置的范围(默认值为 0-100)。例如,假设默认范围,将位置设置为中途将按如下方式完成:

SendMessage(hProgress, PBM_SETPOS, 50, 0);

或者,可以通过PBM_STEPIT逐步增加进度条。它的使用取决于步长增量是多少(默认为 10)。例如,假设进度条的默认范围和初始位置,将位置步进到 10 将按如下方式完成:

SendMessage(hProgress, PBM_STEPIT, 0, 0);
于 2012-04-23T14:59:34.513 回答
2

您可以使用该PMB_STEPIT消息根据步长移动当前位置:

int max_range = 1000;

// set range of progress bar
SendMessage(hProgress, PBM_SETRANGE, 0, MAKELPARAM(0, max_range));

// set the step size
SendMessage(hProgress, PBM_SETSTEP, (WPARAM) 1, 0); 

// increment by step size
SendMessage(hProgress, PBM_STEPIT, 0, 0);

这是一个很好的例子How to Use Progress Bar Controls

于 2012-04-23T15:03:49.777 回答
2

假设您已经初始化了公共控件:

INITCOMMONCONTROLSEX InitCtrlEx;

InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
InitCtrlEx.dwICC  = ICC_PROGRESS_CLASS;
InitCommonControlsEx(&InitCtrlEx);

设置范围:

SendMessage(hProgress, PBM_SETRANGE, 0, MAKELPARAM(min, max)); 

设置位置:

SendMessage(hProgress,PBM_SETPOS,pos,0);

请参阅:MSDN 文档

于 2012-04-23T15:05:34.933 回答
0

除了在进度条中更新进度外,您还必须给它一个重新绘制的机会。通常你会显示一个进度条,因为你正忙于工作,所以正常的消息循环没有运行,也没有生成 WM_PAINT 消息。您可以立即调用UpdateWindow以重新绘制窗口。

于 2012-04-23T15:06:18.607 回答