Задача следующая. Мне нужно смоделировать на компе
устойство управления неким станком. Там стоит клавиатура,
жидкокристаллический дисплей и т.д. По нажатию
кнопки начинает двигаться некоторое устройство станка.
Оно движется, пока не будет достигнут датчик, ИЛИ пока
не будет отпущена кнопка.
Итак, на компьютере я создал класс, производный от CBitmapButton,
добавил обработчики OnLButtonDown и OnLButtonUp.
Из них вызывается метод диалога, куда передается ControlId кнопки,
и состояние true/false. Пока все нормально. Затем нужно
симитировать перемещение. Для простоты я попробовал это
сделать ProgressBar'ом.
То есть (для простоты предположим, что кнопка только одна)
CMyDlg::KeyPressed(int nControlID, bool bPressed)
{
switch (bPressed)
{
case true:
for(int i = 0; i<LastPos; i++)
{
m_ProgressBar.SetPos(i);
// вот из этого цикла нужно выйти, если достигнут датчик (LastPos),
// или отпущена кнопка.
}
break;
case false:
//........
//........
}
}
Как это сделать, чтобы сообщение об отпускании кнопки не потерялось для обработки методом OnLButtonUp? Я вставлял в цикл в разных вариантах PeekMessage, DispatchMessage.
Получалось, что срабатывало через раз. То есть нажал кнопку, ProgressBar побежал,
отпустил — остановился. А в следующий раз по отпускании не останавливается.