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