812 lines
22 KiB
C
812 lines
22 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1994-1998, Microsoft Corporation All rights reserved.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
mousemov.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module contains the routines for the Mouse Pointer Property Sheet
|
||
|
page.
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Include Files.
|
||
|
//
|
||
|
|
||
|
#include "main.h"
|
||
|
#include "util.h"
|
||
|
#include "rc.h"
|
||
|
#include "mousehlp.h"
|
||
|
|
||
|
|
||
|
extern void WINAPI CenterDlgOverParent (HWND hWnd);
|
||
|
|
||
|
#define SAFE_DESTROYICON(hicon) if (hicon) { DestroyIcon(hicon); hicon=NULL; }
|
||
|
|
||
|
//
|
||
|
// Constant Declarations.
|
||
|
//
|
||
|
|
||
|
|
||
|
#define TRAILMIN 2
|
||
|
#define TRAILMAX (TRAILMIN + 5) // range of 8 settings
|
||
|
//
|
||
|
// Motion trackbar parameters.
|
||
|
//
|
||
|
const int MOTION_TB_MIN = 0;
|
||
|
const int MOTION_TB_MAX = 10;
|
||
|
const int MOTION_TB_STEP = 1;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Typedef Declarations.
|
||
|
//
|
||
|
typedef struct
|
||
|
{
|
||
|
int Thresh1;
|
||
|
int Thresh2;
|
||
|
int Accel;
|
||
|
} GETMOUSE;
|
||
|
|
||
|
//
|
||
|
// Dialog Data.
|
||
|
//
|
||
|
typedef struct tag_MouseGenStr
|
||
|
{
|
||
|
int nMotion;
|
||
|
int nOrigMotion;
|
||
|
BOOL fOrigEnhancedMotion;
|
||
|
|
||
|
short nTrailSize;
|
||
|
short nOrigTrailSize;
|
||
|
|
||
|
HWND hWndTrailScroll;
|
||
|
|
||
|
BOOL fOrigSnapTo;
|
||
|
|
||
|
HWND hWndSpeedScroll;
|
||
|
HWND hDlg;
|
||
|
|
||
|
BOOL fOrigVanish;
|
||
|
|
||
|
BOOL fOrigSonar;
|
||
|
} MOUSEPTRSTR, *PMOUSEPTRSTR, *LPMOUSEPTRSTR;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Context Help Ids.
|
||
|
//
|
||
|
|
||
|
const DWORD aMouseMoveHelpIds[] =
|
||
|
{
|
||
|
IDC_GROUPBOX_1, IDH_COMM_GROUPBOX,
|
||
|
MOUSE_SPEEDSCROLL, IDH_MOUSE_POINTERSPEED,
|
||
|
|
||
|
IDC_GROUPBOX_4, IDH_COMM_GROUPBOX,
|
||
|
MOUSE_SNAPDEF, IDH_MOUSE_SNAPTO,
|
||
|
MOUSE_PTRSNAPDEF, IDH_MOUSE_SNAPTO,
|
||
|
|
||
|
IDC_GROUPBOX_5, IDH_COMM_GROUPBOX,
|
||
|
MOUSE_TRAILS, IDH_MOUSE_POINTER_TRAILS,
|
||
|
MOUSE_TRAILSCROLLTXT1, IDH_MOUSE_POINTER_TRAILS,
|
||
|
MOUSE_TRAILSCROLLTXT2, IDH_MOUSE_POINTER_TRAILS,
|
||
|
MOUSE_TRAILSCROLL, IDH_MOUSE_POINTER_TRAILS,
|
||
|
MOUSE_VANISH, IDH_MOUSE_VANISH,
|
||
|
MOUSE_SONAR, IDH_MOUSE_SONAR,
|
||
|
MOUSE_ENHANCED_MOTION, IDH_MOUSE_ENHANCED_MOTION,
|
||
|
|
||
|
0,0
|
||
|
};
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
_IsValidTrackbarMotionValue(
|
||
|
int nMotionTrackbar
|
||
|
)
|
||
|
{
|
||
|
return (MOTION_TB_MIN <= nMotionTrackbar && MOTION_TB_MAX >= nMotionTrackbar);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Sets the mouse acceleration settings.
|
||
|
// If the "Enhanced Motion" checkbox is checked we disable acceleration and
|
||
|
// let USER handle it based on the "motion" setting.
|
||
|
// If the checkbox is unchecked, we default to what was "low" acceleration
|
||
|
// in Windows 2000. Therefore, it is critical that the MOUSE_ENHANCED_MOTION
|
||
|
// checkbox be in the proper configuration before calling this function.
|
||
|
//
|
||
|
DWORD
|
||
|
_SetPointerAcceleration(
|
||
|
HWND hwndDlg,
|
||
|
UINT fWinIni
|
||
|
)
|
||
|
{
|
||
|
DWORD dwResult = ERROR_SUCCESS;
|
||
|
GETMOUSE gm = { 0, 0, 0 };
|
||
|
|
||
|
if (IsDlgButtonChecked(hwndDlg, MOUSE_ENHANCED_MOTION))
|
||
|
{
|
||
|
gm.Thresh1 = 6;
|
||
|
gm.Thresh2 = 10;
|
||
|
gm.Accel = 1;
|
||
|
}
|
||
|
|
||
|
if (!SystemParametersInfo(SPI_SETMOUSE, 0, (PVOID)&gm, fWinIni))
|
||
|
{
|
||
|
dwResult = GetLastError();
|
||
|
ASSERTMSG(0,
|
||
|
"SystemParametersInfo(SPI_SETMOUSE) failed with error %d",
|
||
|
dwResult);
|
||
|
}
|
||
|
return dwResult;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Sets the mouse motion settings based on the current position of
|
||
|
// the motion trackbar and the configuration of the "enhanced motion"
|
||
|
// checkbox.
|
||
|
//
|
||
|
DWORD
|
||
|
_SetPointerMotion(
|
||
|
HWND hwndDlg,
|
||
|
int nMotionTrackbar, // Trackbar position [0 - 10]
|
||
|
UINT fWinIni
|
||
|
)
|
||
|
{
|
||
|
DWORD dwResult = ERROR_SUCCESS;
|
||
|
int nSpiSpeedValue;
|
||
|
|
||
|
//
|
||
|
// Calculations below depend on a trackbar max value of 10.
|
||
|
// If the trackbar scaling changes, the expressions calculating
|
||
|
// the system parameter below must also change.
|
||
|
//
|
||
|
ASSERT(0 == MOTION_TB_MIN);
|
||
|
ASSERT(10 == MOTION_TB_MAX);
|
||
|
ASSERT(_IsValidTrackbarMotionValue(nMotionTrackbar));
|
||
|
|
||
|
if (0 == nMotionTrackbar)
|
||
|
{
|
||
|
//
|
||
|
// SPI_SETMOUSESPEED doesn't accept 0 so we set a lower-bound
|
||
|
// of 1.
|
||
|
//
|
||
|
nSpiSpeedValue = 1;
|
||
|
} else {
|
||
|
nSpiSpeedValue = nMotionTrackbar * 2;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Ensure pointer acceleration is correctly set before setting
|
||
|
// the speed value.
|
||
|
//
|
||
|
dwResult = _SetPointerAcceleration(hwndDlg, fWinIni);
|
||
|
if (ERROR_SUCCESS == dwResult)
|
||
|
{
|
||
|
if (!SystemParametersInfo(SPI_SETMOUSESPEED,
|
||
|
0,
|
||
|
IntToPtr(nSpiSpeedValue),
|
||
|
fWinIni))
|
||
|
{
|
||
|
dwResult = GetLastError();
|
||
|
ASSERTMSG(0,
|
||
|
"SystemParametersInfo(SPI_SETMOUSESPEED) failed with error %d",
|
||
|
dwResult);
|
||
|
}
|
||
|
}
|
||
|
return dwResult;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Retrieves the motion trackbar setting based on the values returned
|
||
|
// by SystemParametersInfo.
|
||
|
//
|
||
|
DWORD
|
||
|
_GetPointerMotion(
|
||
|
HWND hwndDlg,
|
||
|
int *pnMotionTrackbar,
|
||
|
BOOL *pfEnhancedMotion
|
||
|
)
|
||
|
{
|
||
|
BOOL fEnhancedMotion = FALSE;
|
||
|
int nSpiSpeedValue = 0;
|
||
|
int nMotionTrackbar = 0;
|
||
|
GETMOUSE gm;
|
||
|
DWORD dwResult = ERROR_SUCCESS;
|
||
|
|
||
|
ASSERT(0 == MOTION_TB_MIN);
|
||
|
ASSERT(10 == MOTION_TB_MAX);
|
||
|
|
||
|
//
|
||
|
// Read the speed setting from USER.
|
||
|
//
|
||
|
if (!SystemParametersInfo(SPI_GETMOUSESPEED,
|
||
|
0,
|
||
|
&nSpiSpeedValue,
|
||
|
FALSE) ||
|
||
|
!SystemParametersInfo(SPI_GETMOUSE,
|
||
|
0,
|
||
|
&gm,
|
||
|
FALSE))
|
||
|
{
|
||
|
dwResult = GetLastError();
|
||
|
ASSERTMSG(0,
|
||
|
"SystemParametersInfo failed with error %d",
|
||
|
dwResult);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//
|
||
|
// USER is no longer exposing the old acceleration algorithm. Thus,
|
||
|
// if acceleration is on, then "Enhanced Motion" is (since it's the
|
||
|
// only acceleration algorithm supported).
|
||
|
//
|
||
|
if (gm.Accel)
|
||
|
{
|
||
|
//
|
||
|
// Enhanced.
|
||
|
//
|
||
|
fEnhancedMotion = TRUE;
|
||
|
}
|
||
|
|
||
|
if (1 <= nSpiSpeedValue && 20 >= nSpiSpeedValue)
|
||
|
{
|
||
|
//
|
||
|
// Classic.
|
||
|
//
|
||
|
nMotionTrackbar = nSpiSpeedValue / 2;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//
|
||
|
// Invalid value. Default to classic mid-point.
|
||
|
//
|
||
|
nMotionTrackbar = 5;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ASSERT(_IsValidTrackbarMotionValue(nMotionTrackbar));
|
||
|
if (NULL != pfEnhancedMotion)
|
||
|
{
|
||
|
*pfEnhancedMotion = fEnhancedMotion;
|
||
|
}
|
||
|
if (NULL != pnMotionTrackbar)
|
||
|
{
|
||
|
*pnMotionTrackbar = nMotionTrackbar;
|
||
|
}
|
||
|
|
||
|
return dwResult;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// DestroyMousePtrDlg
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
void DestroyMousePtrDlg(
|
||
|
PMOUSEPTRSTR pMstr)
|
||
|
{
|
||
|
HWND hDlg;
|
||
|
|
||
|
ASSERT( pMstr )
|
||
|
|
||
|
if( pMstr )
|
||
|
{
|
||
|
hDlg = pMstr->hDlg;
|
||
|
|
||
|
LocalFree( (HGLOBAL)pMstr );
|
||
|
|
||
|
SetWindowLongPtr( hDlg, DWLP_USER, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// EnableTrailScroll
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
void EnableTrailScroll(
|
||
|
HWND hDlg,
|
||
|
BOOL val)
|
||
|
{
|
||
|
EnableWindow(GetDlgItem(hDlg, MOUSE_TRAILSCROLL), val);
|
||
|
EnableWindow(GetDlgItem(hDlg, MOUSE_TRAILSCROLLTXT1), val);
|
||
|
EnableWindow(GetDlgItem(hDlg, MOUSE_TRAILSCROLLTXT2), val);
|
||
|
}
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// InitMousePtrDlg
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
BOOL InitMousePtrDlg(
|
||
|
HWND hDlg)
|
||
|
{
|
||
|
PMOUSEPTRSTR pMstr = NULL;
|
||
|
|
||
|
BOOL fSnapTo = FALSE; //default
|
||
|
BOOL fVanish = FALSE; //default
|
||
|
BOOL fSonar = FALSE; //default
|
||
|
BOOL fEnhancedMotion = FALSE;
|
||
|
short nTrails = 0; //default
|
||
|
|
||
|
pMstr = (PMOUSEPTRSTR)LocalAlloc(LPTR, sizeof(MOUSEPTRSTR));
|
||
|
|
||
|
if (pMstr == NULL)
|
||
|
{
|
||
|
return (TRUE);
|
||
|
}
|
||
|
|
||
|
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pMstr);
|
||
|
|
||
|
pMstr->hDlg = hDlg;
|
||
|
|
||
|
//
|
||
|
// Mouse Trails
|
||
|
//
|
||
|
SystemParametersInfo(SPI_GETMOUSETRAILS, 0, &nTrails, 0);
|
||
|
pMstr->nOrigTrailSize = pMstr->nTrailSize = nTrails;
|
||
|
|
||
|
|
||
|
SendDlgItemMessage( hDlg,
|
||
|
MOUSE_TRAILSCROLL,
|
||
|
TBM_SETRANGE,
|
||
|
0,
|
||
|
MAKELONG(TRAILMIN, TRAILMAX) );
|
||
|
|
||
|
CheckDlgButton(hDlg, MOUSE_TRAILS, (pMstr->nTrailSize > 1));
|
||
|
|
||
|
if (pMstr->nTrailSize > 1)
|
||
|
{
|
||
|
SendDlgItemMessage( hDlg,
|
||
|
MOUSE_TRAILSCROLL,
|
||
|
TBM_SETPOS,
|
||
|
TRUE,
|
||
|
(LONG)pMstr->nTrailSize );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
pMstr->nTrailSize = TRAILMAX;
|
||
|
|
||
|
EnableTrailScroll(hDlg, FALSE);
|
||
|
|
||
|
SendDlgItemMessage( hDlg,
|
||
|
MOUSE_TRAILSCROLL,
|
||
|
TBM_SETPOS,
|
||
|
TRUE,
|
||
|
(LONG)pMstr->nTrailSize );
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Enable or disable the Snap To Default Checkbutton
|
||
|
//
|
||
|
SystemParametersInfo(SPI_GETSNAPTODEFBUTTON, 0, (PVOID)&fSnapTo, FALSE);
|
||
|
pMstr->fOrigSnapTo = fSnapTo;
|
||
|
CheckDlgButton(hDlg, MOUSE_SNAPDEF, fSnapTo);
|
||
|
|
||
|
//
|
||
|
//Enable or disable the Sonar Checkbutton
|
||
|
//
|
||
|
SystemParametersInfo(SPI_GETMOUSESONAR, 0, (PVOID)&fSonar, FALSE);
|
||
|
pMstr->fOrigSonar = fSonar;
|
||
|
CheckDlgButton(hDlg, MOUSE_SONAR, fSonar);
|
||
|
|
||
|
//
|
||
|
//Enable or disable the Vanish Checkbutton
|
||
|
//
|
||
|
SystemParametersInfo(SPI_GETMOUSEVANISH, 0, (PVOID)&fVanish, FALSE);
|
||
|
pMstr->fOrigVanish = fVanish;
|
||
|
CheckDlgButton(hDlg, MOUSE_VANISH, fVanish);
|
||
|
|
||
|
//
|
||
|
// Mouse Speed
|
||
|
//
|
||
|
_GetPointerMotion(hDlg, &pMstr->nOrigMotion, &fEnhancedMotion);
|
||
|
|
||
|
CheckDlgButton(hDlg, MOUSE_ENHANCED_MOTION, fEnhancedMotion);
|
||
|
pMstr->nMotion = pMstr->nOrigMotion;
|
||
|
pMstr->fOrigEnhancedMotion = fEnhancedMotion;
|
||
|
|
||
|
pMstr->hWndTrailScroll = GetDlgItem(hDlg, MOUSE_TRAILSCROLL);
|
||
|
|
||
|
pMstr->hWndSpeedScroll = GetDlgItem(hDlg, MOUSE_SPEEDSCROLL);
|
||
|
|
||
|
SendDlgItemMessage( hDlg,
|
||
|
MOUSE_SPEEDSCROLL,
|
||
|
TBM_SETRANGE,
|
||
|
0,
|
||
|
MAKELONG(MOTION_TB_MIN, MOTION_TB_MAX) );
|
||
|
|
||
|
SendDlgItemMessage( hDlg,
|
||
|
MOUSE_SPEEDSCROLL,
|
||
|
TBM_SETTICFREQ,
|
||
|
MOTION_TB_STEP,
|
||
|
0);
|
||
|
|
||
|
SendDlgItemMessage( hDlg,
|
||
|
MOUSE_SPEEDSCROLL,
|
||
|
TBM_SETLINESIZE,
|
||
|
0,
|
||
|
MOTION_TB_STEP);
|
||
|
|
||
|
SendDlgItemMessage( hDlg,
|
||
|
MOUSE_SPEEDSCROLL,
|
||
|
TBM_SETPOS,
|
||
|
TRUE,
|
||
|
(LONG)pMstr->nOrigMotion);
|
||
|
return (TRUE);
|
||
|
}
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// TrailScroll
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
void TrailScroll(
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam,
|
||
|
PMOUSEPTRSTR pMstr)
|
||
|
{
|
||
|
pMstr->nTrailSize = (short)SendMessage((HWND)lParam, TBM_GETPOS, 0, 0L);
|
||
|
SystemParametersInfo(SPI_SETMOUSETRAILS, pMstr->nTrailSize, 0,0);
|
||
|
}
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// SpeedScroll
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
void SpeedScroll(
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam,
|
||
|
PMOUSEPTRSTR pMstr)
|
||
|
{
|
||
|
const HWND hwndTrackbar = (HWND)lParam;
|
||
|
pMstr->nMotion = (int)SendMessage(hwndTrackbar, TBM_GETPOS, 0, 0L);
|
||
|
//
|
||
|
// Update speed when they let go of the thumb.
|
||
|
//
|
||
|
if (LOWORD(wParam) == SB_ENDSCROLL)
|
||
|
{
|
||
|
const HWND hwndDlg = GetParent(hwndTrackbar);
|
||
|
_SetPointerMotion(hwndDlg, pMstr->nMotion, SPIF_SENDCHANGE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//
|
||
|
// User checked or unchecked the "Enhanced pointer motion" checkbox.
|
||
|
//
|
||
|
void
|
||
|
_OnEnhancedMotionChecked(
|
||
|
PMOUSEPTRSTR pMstr
|
||
|
)
|
||
|
{
|
||
|
const HWND hwndTrackbar = (HWND)pMstr->hWndSpeedScroll;
|
||
|
const HWND hwndDlg = GetParent(hwndTrackbar);
|
||
|
|
||
|
pMstr->nMotion = (int)SendMessage(hwndTrackbar, TBM_GETPOS, 0, 0L);
|
||
|
_SetPointerMotion(hwndDlg, pMstr->nMotion, SPIF_SENDCHANGE);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// MouseMovDlg
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
INT_PTR CALLBACK MouseMovDlg(
|
||
|
HWND hDlg,
|
||
|
UINT message,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
PMOUSEPTRSTR pMstr = NULL;
|
||
|
BOOL bRet = FALSE;
|
||
|
|
||
|
pMstr = (PMOUSEPTRSTR)GetWindowLongPtr(hDlg, DWLP_USER);
|
||
|
|
||
|
switch (message)
|
||
|
{
|
||
|
case ( WM_INITDIALOG ) :
|
||
|
{
|
||
|
bRet = InitMousePtrDlg(hDlg);
|
||
|
break;
|
||
|
}
|
||
|
case ( WM_DESTROY ) :
|
||
|
{
|
||
|
DestroyMousePtrDlg(pMstr);
|
||
|
break;
|
||
|
}
|
||
|
case ( WM_HSCROLL ) :
|
||
|
{
|
||
|
SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L);
|
||
|
|
||
|
if ((HWND)lParam == pMstr->hWndSpeedScroll)
|
||
|
{
|
||
|
SpeedScroll(wParam, lParam, pMstr);
|
||
|
}
|
||
|
else if ((HWND)lParam == pMstr->hWndTrailScroll)
|
||
|
{
|
||
|
TrailScroll(wParam, lParam, pMstr);
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
case ( WM_COMMAND ) :
|
||
|
{
|
||
|
switch (LOWORD(wParam))
|
||
|
{
|
||
|
case ( MOUSE_TRAILS ) :
|
||
|
{
|
||
|
if (IsDlgButtonChecked(hDlg, MOUSE_TRAILS))
|
||
|
{
|
||
|
EnableTrailScroll(hDlg, TRUE);
|
||
|
|
||
|
pMstr->nTrailSize =
|
||
|
(int)SendMessage( pMstr->hWndTrailScroll,
|
||
|
TBM_GETPOS,
|
||
|
0,
|
||
|
0 );
|
||
|
SystemParametersInfo( SPI_SETMOUSETRAILS,
|
||
|
pMstr->nTrailSize,
|
||
|
0,
|
||
|
0 );
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
EnableTrailScroll(hDlg, FALSE);
|
||
|
SystemParametersInfo(SPI_SETMOUSETRAILS, 0, 0, 0);
|
||
|
}
|
||
|
SendMessage( GetParent(hDlg),
|
||
|
PSM_CHANGED,
|
||
|
(WPARAM)hDlg,
|
||
|
0L );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case ( MOUSE_SNAPDEF ) :
|
||
|
{
|
||
|
SystemParametersInfo( SPI_SETSNAPTODEFBUTTON,
|
||
|
IsDlgButtonChecked(hDlg, MOUSE_SNAPDEF),
|
||
|
0,
|
||
|
FALSE );
|
||
|
SendMessage( GetParent(hDlg),
|
||
|
PSM_CHANGED,
|
||
|
(WPARAM)hDlg,
|
||
|
0L );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case ( MOUSE_SONAR ) :
|
||
|
{
|
||
|
SystemParametersInfo( SPI_SETMOUSESONAR,
|
||
|
0,
|
||
|
IntToPtr( IsDlgButtonChecked(hDlg, MOUSE_SONAR) ),
|
||
|
FALSE );
|
||
|
SendMessage( GetParent(hDlg),
|
||
|
PSM_CHANGED,
|
||
|
(WPARAM)hDlg,
|
||
|
0L );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case ( MOUSE_VANISH ) :
|
||
|
{
|
||
|
SystemParametersInfo( SPI_SETMOUSEVANISH,
|
||
|
0,
|
||
|
IntToPtr( IsDlgButtonChecked(hDlg, MOUSE_VANISH) ),
|
||
|
FALSE );
|
||
|
SendMessage( GetParent(hDlg),
|
||
|
PSM_CHANGED,
|
||
|
(WPARAM)hDlg,
|
||
|
0L );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case ( MOUSE_ENHANCED_MOTION ) :
|
||
|
_OnEnhancedMotionChecked(pMstr);
|
||
|
SendMessage( GetParent(hDlg),
|
||
|
PSM_CHANGED,
|
||
|
(WPARAM)hDlg,
|
||
|
0L );
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case ( WM_NOTIFY ) :
|
||
|
{
|
||
|
switch (((NMHDR *)lParam)->code)
|
||
|
{
|
||
|
case ( PSN_APPLY ) :
|
||
|
{
|
||
|
short nTrails = 0;
|
||
|
BOOL fSnapTo = FALSE;
|
||
|
BOOL fSonar = FALSE;
|
||
|
BOOL fVanish = FALSE;
|
||
|
|
||
|
//
|
||
|
// Change cursor to hour glass.
|
||
|
//
|
||
|
HourGlass(TRUE);
|
||
|
|
||
|
//
|
||
|
// Apply Mouse trails setting.
|
||
|
//
|
||
|
nTrails = (IsDlgButtonChecked(hDlg, MOUSE_TRAILS)) ? pMstr->nTrailSize : 0;
|
||
|
SystemParametersInfo( SPI_SETMOUSETRAILS,
|
||
|
nTrails,
|
||
|
0,
|
||
|
SPIF_UPDATEINIFILE |
|
||
|
SPIF_SENDCHANGE );
|
||
|
pMstr->nOrigTrailSize = pMstr->nTrailSize = nTrails;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Apply Snap-To-Default setting.
|
||
|
//
|
||
|
fSnapTo = IsDlgButtonChecked(hDlg, MOUSE_SNAPDEF);
|
||
|
|
||
|
if (fSnapTo != pMstr->fOrigSnapTo)
|
||
|
{
|
||
|
SystemParametersInfo( SPI_SETSNAPTODEFBUTTON,
|
||
|
fSnapTo,
|
||
|
0,
|
||
|
SPIF_UPDATEINIFILE |
|
||
|
SPIF_SENDCHANGE );
|
||
|
pMstr->fOrigSnapTo = fSnapTo;
|
||
|
}
|
||
|
|
||
|
|
||
|
//
|
||
|
// Apply Sonar setting.
|
||
|
//
|
||
|
fSonar = IsDlgButtonChecked(hDlg, MOUSE_SONAR);
|
||
|
if (fSonar != pMstr->fOrigSonar)
|
||
|
{
|
||
|
SystemParametersInfo( SPI_SETMOUSESONAR,
|
||
|
0,
|
||
|
IntToPtr(fSonar),
|
||
|
SPIF_UPDATEINIFILE |
|
||
|
SPIF_SENDCHANGE );
|
||
|
pMstr->fOrigSonar = fSonar;
|
||
|
}
|
||
|
|
||
|
|
||
|
//
|
||
|
// Apply Vanish setting.
|
||
|
//
|
||
|
fVanish = IsDlgButtonChecked(hDlg, MOUSE_VANISH);
|
||
|
|
||
|
if (fVanish != pMstr->fOrigVanish)
|
||
|
{
|
||
|
SystemParametersInfo( SPI_SETMOUSEVANISH,
|
||
|
0,
|
||
|
IntToPtr(fVanish),
|
||
|
SPIF_UPDATEINIFILE |
|
||
|
SPIF_SENDCHANGE );
|
||
|
pMstr->fOrigVanish = fVanish;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Apply Mouse Speed setting.
|
||
|
//
|
||
|
_SetPointerMotion(hDlg, pMstr->nMotion, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
|
||
|
pMstr->fOrigEnhancedMotion = IsDlgButtonChecked(hDlg, MOUSE_ENHANCED_MOTION);
|
||
|
pMstr->nOrigMotion = pMstr->nMotion;
|
||
|
|
||
|
HourGlass(FALSE);
|
||
|
break;
|
||
|
}
|
||
|
case ( PSN_RESET ) :
|
||
|
{
|
||
|
//
|
||
|
// Restore the original Mouse Trails setting.
|
||
|
//
|
||
|
SystemParametersInfo( SPI_SETMOUSETRAILS,
|
||
|
pMstr->nOrigTrailSize,
|
||
|
0,
|
||
|
0 );
|
||
|
|
||
|
//
|
||
|
// Restore the original Snap-To-Default setting .
|
||
|
//
|
||
|
SystemParametersInfo( SPI_SETSNAPTODEFBUTTON,
|
||
|
pMstr->fOrigSnapTo,
|
||
|
0,
|
||
|
0 );
|
||
|
|
||
|
//
|
||
|
// Restore the original Sonar setting.
|
||
|
//
|
||
|
SystemParametersInfo( SPI_SETMOUSESONAR,
|
||
|
0,
|
||
|
IntToPtr(pMstr->fOrigSonar),
|
||
|
0);
|
||
|
|
||
|
//
|
||
|
// Restore the original Vanish setting.
|
||
|
//
|
||
|
SystemParametersInfo( SPI_SETMOUSEVANISH,
|
||
|
0,
|
||
|
IntToPtr(pMstr->fOrigVanish),
|
||
|
0);
|
||
|
|
||
|
//
|
||
|
// Restore the original Mouse Motion value.
|
||
|
//
|
||
|
CheckDlgButton(hDlg, MOUSE_ENHANCED_MOTION, pMstr->fOrigEnhancedMotion);
|
||
|
_SetPointerMotion(hDlg, pMstr->nOrigMotion, FALSE);
|
||
|
break;
|
||
|
}
|
||
|
default :
|
||
|
{
|
||
|
return (FALSE);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case ( WM_HELP ) : // F1
|
||
|
{
|
||
|
WinHelp( (HWND)((LPHELPINFO)lParam)->hItemHandle,
|
||
|
HELP_FILE,
|
||
|
HELP_WM_HELP,
|
||
|
(DWORD_PTR)(LPTSTR)aMouseMoveHelpIds );
|
||
|
break;
|
||
|
}
|
||
|
case ( WM_CONTEXTMENU ) : // right mouse click
|
||
|
{
|
||
|
WinHelp( (HWND)wParam,
|
||
|
HELP_FILE,
|
||
|
HELP_CONTEXTMENU,
|
||
|
(DWORD_PTR)(LPTSTR)aMouseMoveHelpIds );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case ( WM_DISPLAYCHANGE ) :
|
||
|
case ( WM_WININICHANGE ) :
|
||
|
case ( WM_SYSCOLORCHANGE ) :
|
||
|
{
|
||
|
SHPropagateMessage(hDlg, message, wParam, lParam, TRUE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
default :
|
||
|
{
|
||
|
return (FALSE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return (TRUE);
|
||
|
}
|