如何更新进度条?

时间:2012-04-23 14:56:48

标签: winapi progress-bar

如何在win32api中更新此进度条?您可以在此处找到完整代码Code is here

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

4 个答案:

答案 0 :(得分:4)

您要查找的邮件是PBM_SETPOS。其用法取决于当前设置的范围(默认值为0-100)。例如,假设默认范围,将位置设置为中途将如下:

SendMessage(hProgress, PBM_SETPOS, 50, 0);

或者,进度条可以逐步增加PBM_STEPIT。其用法取决于步长增量(默认为10)。例如,假设进度条的默认范围和初始位置,将位置步进到10将如下:

SendMessage(hProgress, PBM_STEPIT, 0, 0);

答案 1 :(得分: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

答案 2 :(得分: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 docs

答案 3 :(得分:0)

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