Извлечение числа прокручиваемых строк колесиком мыши


Нижеследующий код дает возможность приложению извлечь данные о числе прокручиваемых строк. Это присуще только для тех операционных систем, которые поддерживают колесико, для таких как Windows NT Microsoft ® 4.0 и выше, рекомендуется SystemParametersInfo.

Демонстрационный пример

/* SPI_GETWHEELSCROLLLINES
   определяется в winuser.h начиная с Windows NT 4.0.
   Функция SystemParametersInfo была модернизирована для
   выполнения операций прокручивания строк.
*/

#ifndef SPI_GETWHEELSCROLLLINES
#define SPI_GETWHEELSCROLLLINES   104
#endif

#include "zmouse.h"

/*********************************************************
* Функция     : GetNumScrollLines
* Назначение  : Независимый метод ОС извлекать число 
*               прокручиваемых строк колесиком мыши.
* Параметры   : не имеется
* Возвр.знач. : UINT:  Число прокручиваемых строк, где  
*               WHEEL_PAGESCROLL обозначает скроллинг
*               просмотра страницы за один раз.
*********************************************************/
UINT GetNumScrollLines(void)
{
   HWND hdlMsWheel;
   UINT ucNumLines=3;  // 3 является значением по умолчанию
   OSVERSIONINFO osversion;
   UINT uiMsh_MsgScrollLines;
   

   memset(&osversion, 0, sizeof(OSVERSIONINFO));
   osversion.dwOSVersionInfoSize =sizeof(OSVERSIONINFO);
   GetVersionEx(&osversion);

   // В Windows 9x & Windows NT 3.51, запрашивает MSWheel
   // число прокручиваемых строк. В Windows NT 4.0 и позже,
   // используется функция SystemParametersInfo. 

   if ((osversion.dwPlatformId ==
                        VER_PLATFORM_WIN32_WINDOWS) ||
       ( (osversion.dwPlatformId ==
                      VER_PLATFORM_WIN32_NT) && 
         (osversion.dwMajorVersion < 4) )   )
   {
        hdlMsWheel = FindWindow(MSH_WHEELMODULE_CLASS, 
                                MSH_WHEELMODULE_TITLE);
        if (hdlMsWheel)
        {
           uiMsh_MsgScrollLines = RegisterWindowMessage
                                     (MSH_SCROLL_LINES);
           if (uiMsh_MsgScrollLines)
                ucNumLines = (int)SendMessage(hdlMsWheel,
                                    uiMsh_MsgScrollLines, 
                                                       0, 
                                                       0);
        }
   }
   else if ( (osversion.dwPlatformId ==
                         VER_PLATFORM_WIN32_NT) &&
             (osversion.dwMajorVersion >= 4) )
   {
      SystemParametersInfo(SPI_GETWHEELSCROLLLINES,
                                          0,
                                    &ucNumLines, 0);
   }
   return(ucNumLines);
}

Назад в оглавление
На главную страницу

Hosted by uCoz