Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Сообщение колёсика мыши.


Автор: Abbath1349 13.11.2010, 11:34
Не подскажите каким сообщение в полосе прокрутки реализовать движение колёсиком мыши? не где не могу найти.

Автор: GremlinProg 13.11.2010, 12:37
WM_MOUSEWHEEL,
но для полос прокрутки это сообщение уже перехватывается и преобразуется в соответствующее WM_HSCROLL или WM_VSCROLL

Автор: Abbath1349 13.11.2010, 14:16
И как это дело можно реализовать?
Я вот так попробовал
Код

case WM_MOUSEWHEEL:
    case WM_VSCROLL :        
        switch(LOWORD(wParam))
        {            
            case SB_LINEUP   : iVscrollPos--; break;
            case SB_LINEDOWN : iVscrollPos++; break;
            case SB_PAGEUP   : iVscrollPos -= sy / size.cy; break;
            case SB_PAGEDOWN : iVscrollPos += sy / size.cy; break;
            
            case SB_THUMBPOSITION : 
            case SB_THUMBTRACK: iVscrollPos = HIWORD(wParam); break;                                        
            iVscrollPos = HIWORD(wParam); 
            break;
        }
        iVscrollPos = max(0, min(iVscrollPos, COUNT));
        if (iVscrollPos != GetScrollPos(hWnd, SB_VERT))
        {    
            SetScrollPos(hWnd, SB_VERT, iVscrollPos, TRUE);
            InvalidateRect(hWnd, NULL, TRUE);
        }
        break;


Но он крутит у меня только вверх.

Автор: GremlinProg 14.11.2010, 09:51
нет, WM_MOUSEWHEEL и WM_VSCROLL объединять не надо
Цитата(WM_MOUSEWHEEL Message @  MSDN)

wParam

The high-order word indicates the distance the wheel is rotated, expressed in multiples or divisions of WHEEL_DELTA, which is 120. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user.

The low-order word indicates whether various virtual keys are down.

т.е. число строк из этого сообщения надо получать так:
Код

SHORT( HIWORD( wParam )  ) / WHEEL_DELTA


Добавлено через 6 минут и 6 секунд
т.е. модификация iVscrollPos на WM_MOUSEWHEEL должна быть такой:
Код

iVscrollPos -= SHORT( HIWORD( wParam )  ) / WHEEL_DELTA

это вместо свитча

Автор: Abbath1349 14.11.2010, 15:35
Да я уже немного подругому сделал ) спс)

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