Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Что-то вроде Spin Control


Автор: Дрон 10.7.2003, 23:17
Есть программа, в той программе окно, а в окне кнопка... smile.gif
По нажатию кнопки увеличивается значение переменной.
Как сделать так, что если пользователь нажал и удерживает кнопку нажатой, то значение переменной увеличивалось бы постоянно, как, например, в ScrollBar'е или Spin Control при нажатии на стрелку?

Ну а написано это всё, конечно, на "чистом" Win32 API.

Автор: RAN 11.7.2003, 08:14
Есть токие коды у WM_COMMAND, как BN_PUSHED и BN_UNPUSHED, которые MicroSoft советует побыстрей забыть и использовать вместо них, кнопки с BS_OWNERDRAW. Вот в твоём случае они бы идеально подошли:

В BN_PUSHED создаёшь таймер SetTimer(hwnd, 1, 1000, NULL);
B WM_TIMER увеличиваешь значение
В BN_UNPUSHED удаляешь таймер KillTimer(hwnd, 1);

А через WM_DRAWITEM, мне кажется, сложно - придётся самому кнопу рисовать.

Есть другое решение заменить функцию обработки сообщений кнопки на свою, с вызовом в конце DefWindowProc для стандартной функции обработки. Тогда там использовать WM_LBUTTONDOWN, WM_LBUTTONUP.

Или пойти дальше и наложить Hook, хотя это уже крайняя мера.

Автор: Дрон 11.7.2003, 23:03
Понял.
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)