2012-04-23 67 views

回答

2

完整的代码你正在寻找的信息是PBM_SETPOS。这种用法取决于当前设置的范围(默认值为0-100)。例如,假设默认范围,所述位置设定到中途将被完成为这样:

SendMessage(hProgress, PBM_SETPOS, 50, 0); 

替代地,进度条可以在步骤通过PBM_STEPIT递增。这个用法取决于步增量(默认为10)。例如,假设默认的范围和进度条的初始位置,踩着位置10将完成像这样:

SendMessage(hProgress, PBM_STEPIT, 0, 0); 
+0

我尝试了,它在这里不工作是完整的代码。 [代码在这里](http://dl.dropbox.com/u/19835281/main.cpp) – iphone4life4 2012-04-23 15:02:32

+0

你的问题在于'hProgress'超出了范围。一个简单的解决方法是使其成为静态的('静态HWND hProgress')。 – 2012-04-23 15:06:51

+0

您的代码不会初始化公共控件。看我的帖子。 – Neil 2012-04-23 15:08:22

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

假设你已经初始化通用控件:

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

+0

它得到这个 错误:'INITCOMMONCONTROLSEX'未申报(首次使用此功能) – iphone4life4 2012-04-24 02:28:47

+0

@ iphone4life4我知道这是一个旧评论,但其他人可能会觉得它有用。这很可能是因为你忘记链接'Comctl32.lib' – Vallentin 2016-01-16 19:11:16

0

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