2012-04-23 4 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

+0

Ваша проблема в том, что 'hProgress' выпадает из сферы действия. Одно быстрое решение - сделать его статическим ('static HWND hProgress'). –

+0

Ваш код не инициализирует общие элементы управления. Смотрите мой пост. – Neil

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

+0

@ iphone4life4 Я знаю, что это старый комментарий, но кто-то может найти его полезным. Скорее всего, потому, что вы забыли связать 'Comctl32.lib' – Vallentin

0

В дополнение к обновлению прогресса в строке прогресса, вы должны дать ему шанс перекрасить. Обычно вы показываете индикатор выполнения, потому что вы заняты работой, поэтому нормальный цикл сообщений не запущен и не генерируются сообщения WM_PAINT. Вы можете позвонить UpdateWindow, чтобы сразу перерисовать окно.

Смежные вопросы