2010-05-17 4 views
0

У меня есть окно со стилями прокрутки, поэтому у него есть собственные полосы прокрутки. Я хочу, чтобы что-то произошло, когда мышь нависает над полосами прокрутки, но обработка движения мыши в окне не делает этого трюка. Как я могу обработать событие mousemove прокрутки?Перемещение мыши на полосу прокрутки окна (WinAPI)

Благодаря

+0

В основном я хотел бы, чтобы вести себя, как если у вас есть WS_SIZEBOX, но только внизу и справа, а не вверх и налево .. – jmasterx

ответ

1

В API Win32, скроллбары нет 'MouseMove события'. Единственное сообщение, которое вы получаете от вертикальной полосы прокрутки, - WM_VSCROLL.

Если вы хотите, чтобы ваши полоса прокрутки имела особое поведение, вам необходимо подклассифицировать их и переопределить обработку Mouse Messages. Как говорится в MSDN (Scroll Bar Controls in Win32):

Если, однако, вы хотите изменить стандартный вид или функцию панели прокрутки, вы можете либо подкласс на полосы прокрутки на окне или создать автономный контроль.

Примеры кода, которые делают это путем поиска «подкласса прокрутки».

Редактировать

Что я пытаюсь сделать, это использовать край от скроллинга, чтобы сделать мое дополнительное окно изменяемыми, возможно ли это?

Полоса прокрутки - это не способ сделать это. Вместо этого определите окно шириной в несколько пикселей справа от полосы прокрутки (и как высокий). Установите курсор в этом окне, чтобы быть «изменить размер» курсор (так что пользователь будет знать, чтобы щелкнуть и перетащить):

resize cursors

Когда это окно получает сообщение WM_LBUTTONDOWN, он должен начать отслеживание мыши, изменение размера и перерисовывая ваш контроль всякий раз, когда движется мышь. Когда окно получает WM_LBUTTONUP, оно должно прекратить отслеживание и оставить ваш контроль в новом размере.

Here's some code, который поможет вам начать работу с отслеживанием мыши. Это для рисования линий, но процесс похож.

+0

Что я пытаюсь сделать, это использовать край полосы прокрутки, чтобы мой sub window resizable, возможно ли это? – jmasterx

0

Проверьте, подходит ли перехват WM_NCMOUSEMOVE.

WM_NCMOUSEMOVE сообщение опубликовано к окну, когда курсор перемещается в нерабочей зоне окна. Это сообщение отправляется в окно , содержащее курсор. Если окно захватило мышь, это сообщение не отправлено.

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