/****************************************************************************

*                                                                           *

* ZMOUSE.H -- Include file for IntelliMouse(tm) 1.0                         *

*                                                                           *

* NOTE:  Zmouse.h contains #defines required when providing IntelliMouse    *

*        wheel support for Windows95 and NT3.51.  Wheel is supported        *

*        natively in WinNT4.0, please refer to the NT4.0 SDK for more info  *

*        on providing support for IntelliMouse in NT4.0.                    *

*                                                                           *

* Copyright (c) 1983-1996, Microsoft Corp. All rights reserved.             *

*                                                                           *

\***************************************************************************/





/**************************************************************************

	 Client Appplication (API) Defines for Wheel rolling

***************************************************************************/





// Apps need to call RegisterWindowMessage using the #define below to

// get the message number that is sent to the foreground window

// when a wheel roll occurs



#ifdef UNICODE

#define MSH_MOUSEWHEEL L"MSWHEEL_ROLLMSG"

#else

#define MSH_MOUSEWHEEL "MSWHEEL_ROLLMSG"

#endif

   // wParam = wheel rotation expressed in multiples of WHEEL_DELTA

   // lParam is the mouse coordinates



#define WHEEL_DELTA      120      // Default value for rolling one notch





#ifndef WM_MOUSEWHEEL

#define WM_MOUSEWHEEL (WM_MOUSELAST+1)  // message that will be supported

                                        // by the OS 

#endif





/**************************************************************************

    Client Appplication (API) Defines for

	   *  determining if wheel support active

	   *  determining # of Scroll Lines

***************************************************************************/



// Class name for MSWHEEL.EXE's invisible window 

// use FindWindow to get hwnd to MSWHEEL

#ifdef UNICODE

#define MOUSEZ_CLASSNAME  L"MouseZ"           // wheel window class  

#define MOUSEZ_TITLE      L"Magellan MSWHEEL" // wheel window title

#else

#define MOUSEZ_CLASSNAME  "MouseZ"            // wheel window class  

#define MOUSEZ_TITLE      "Magellan MSWHEEL"  // wheel window title

#endif



#define MSH_WHEELMODULE_CLASS (MOUSEZ_CLASSNAME)

#define MSH_WHEELMODULE_TITLE (MOUSEZ_TITLE)



// Apps need to call RegisterWindowMessage using the #defines 

// below to get the message numbers for:

// 1) the message that can be sent to the MSWHEEL window to

//    query if wheel support is active (MSH_WHEELSUPPORT)>

// 2) the message to query for the number of scroll lines 

//    (MSH_SCROLL_LINES)  

//

// To send a message to MSWheel window, use FindWindow with the #defines

// for CLASS and TITLE above.  If FindWindow fails to find the MSWHEEL

// window or the return from SendMessage is false, then Wheel support

// is not currently available.



#ifdef UNICODE

#define MSH_WHEELSUPPORT L"MSH_WHEELSUPPORT_MSG" // name of msg to send

                                                 // to query for wheel support

#else

#define MSH_WHEELSUPPORT "MSH_WHEELSUPPORT_MSG"  // name of msg to send

                                                 // to query for wheel support

#endif



// MSH_WHEELSUPPORT

//    wParam - not used 

//    lParam - not used

//    returns BOOL - TRUE if wheel support is active, FALSE otherwise



                                

#ifdef UNICODE

#define MSH_SCROLL_LINES L"MSH_SCROLL_LINES_MSG"

#else

#define MSH_SCROLL_LINES "MSH_SCROLL_LINES_MSG"

#endif



// MSH_SCROLL_LINES

//    wParam - not used 

//    lParam - not used

//    returns int  - number of lines to scroll on a wheel roll



#ifndef  WHEEL_PAGESCROLL  

#define WHEEL_PAGESCROLL  (UINT_MAX)   // signifies to scroll a page, also

                                       // defined in winuser.h in the

                                       // NT4.0 SDK

#endif 



#ifndef SPI_SETWHEELSCROLLLINES

#define SPI_SETWHEELSCROLLLINES   105  // Also defined in winuser.h in the

                                       // NT4.0 SDK, please see the NT4.0 SDK

                                       // documentation for NT4.0 implementation

                                       // specifics.

                                       // For Win95 and WinNT3.51, 

                                       // Mswheel broadcasts the message

                                       // WM_SETTINGCHANGE (equivalent to

                                       // WM_WININICHANGE) when the scroll

                                       // lines has changed.  Applications

                                       // will recieve the WM_SETTINGCHANGE

                                       // message with the wParam set to

                                       // SPI_SETWHEELSCROLLLINES.  When

                                       // this message is recieved the application

                                       // should query Mswheel for the new 

                                       // setting.

#endif





/*********************************************************************

* INLINE FUNCTION: HwndMsWheel

* Purpose : Get a reference to MSWheel Window, the registered messages,  

*           wheel support active setting, and number of scrollLines

* Params  : PUINT puiMsh_MsgMouseWheel - address of UINT to contain returned registered wheel message

*           PUINT puiMsh_Msg3DSupport - address of UINT to contain wheel support registered message

*           PUINT puiMsh_MsgScrollLines - address of UINT to contain Scroll lines registered message

*           PBOOL pf3DSupport - address of BOOL to contain returned flag for wheel support active

*           PINT  piScrollLines - address of int to contain returned scroll lines

* Returns : HWND handle to the MsWheel window

* Note    : The return value for pf3DSupport and piScrollLines is dependant

*           on the POINT32 module.  If POINT32 module is not running then

*           the values returned for these parameters will be

*           FALSE and 3, respectively. 

*********************************************************************/

__inline HWND HwndMSWheel( 

      PUINT puiMsh_MsgMouseWheel,

      PUINT puiMsh_Msg3DSupport,

      PUINT puiMsh_MsgScrollLines,

      PBOOL pf3DSupport,

      PINT  piScrollLines

)

{

   HWND hdlMsWheel;



   hdlMsWheel = FindWindow(MSH_WHEELMODULE_CLASS, MSH_WHEELMODULE_TITLE);



   *puiMsh_MsgMouseWheel = RegisterWindowMessage(MSH_MOUSEWHEEL);

   *puiMsh_Msg3DSupport = RegisterWindowMessage(MSH_WHEELSUPPORT);

   *puiMsh_MsgScrollLines = RegisterWindowMessage(MSH_SCROLL_LINES);



   if (*puiMsh_Msg3DSupport)

      *pf3DSupport = (BOOL)SendMessage(hdlMsWheel, *puiMsh_Msg3DSupport, 0, 0);

   else

      *pf3DSupport = FALSE;  // default to FALSE



   if (*puiMsh_MsgScrollLines)

      *piScrollLines = (int)SendMessage(hdlMsWheel, *puiMsh_MsgScrollLines, 0, 0);

   else

      *piScrollLines = 3;  // default



   return(hdlMsWheel);

}







