2004-10-30 12:36:14 +00:00
|
|
|
/*
|
|
|
|
* ReactOS
|
2007-04-14 14:26:46 +00:00
|
|
|
* Copyright (C) 2004, 2007 ReactOS Team
|
2004-10-30 12:36:14 +00:00
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
*/
|
2005-01-06 13:58:04 +00:00
|
|
|
/* $Id$
|
2004-10-30 12:36:14 +00:00
|
|
|
*
|
|
|
|
* PROJECT: ReactOS Main Control Panel
|
|
|
|
* FILE: lib/cpl/main/mouse.c
|
|
|
|
* PURPOSE: Mouse Control Panel
|
|
|
|
* PROGRAMMER: Eric Kohl
|
2006-05-03 13:45:22 +00:00
|
|
|
* Johannes Anderwald
|
2004-10-30 12:36:14 +00:00
|
|
|
*/
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
//TODO:
|
2007-04-22 15:11:04 +00:00
|
|
|
// add missing icons
|
|
|
|
// Options- pointer precision
|
2006-05-03 13:45:22 +00:00
|
|
|
|
2006-05-06 11:26:27 +00:00
|
|
|
#define WINVER 0x0501
|
|
|
|
|
2004-10-30 12:36:14 +00:00
|
|
|
#include <windows.h>
|
2006-05-03 13:45:22 +00:00
|
|
|
#include <winuser.h>
|
2005-11-25 17:02:18 +00:00
|
|
|
#include <devguid.h>
|
2004-10-30 12:36:14 +00:00
|
|
|
#include <commctrl.h>
|
|
|
|
#include <cpl.h>
|
2006-05-03 13:45:22 +00:00
|
|
|
#include <tchar.h>
|
|
|
|
#include <math.h>
|
|
|
|
#include <limits.h>
|
2004-10-30 12:36:14 +00:00
|
|
|
|
2007-04-19 15:00:56 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
|
2004-10-30 12:36:14 +00:00
|
|
|
#include "main.h"
|
|
|
|
#include "resource.h"
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
#define DEFAULT_DOUBLE_CLICK_SPEED 500
|
|
|
|
#define DEFAULT_CLICK_LOCK_TIME 2200
|
|
|
|
#define DEFAULT_MOUSE_SENSITIVITY 16
|
|
|
|
#define DEFAULT_MOUSE_THRESHOLD1 6
|
|
|
|
#define DEFAULT_MOUSE_THRESHOLD2 10
|
|
|
|
#define MIN_DOUBLE_CLICK_SPEED 200
|
|
|
|
#define MAX_DOUBLE_CLICK_SPEED 900
|
|
|
|
#define DEFAULT_WHEEL_SCROLL_LINES 3
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
|
|
|
|
typedef struct _BUTTON_DATA
|
|
|
|
{
|
|
|
|
ULONG g_SwapMouseButtons;
|
|
|
|
ULONG g_OrigSwapMouseButtons;
|
|
|
|
ULONG g_DoubleClickSpeed; // = DEFAULT_DOUBLE_CLICK_SPEED;
|
|
|
|
ULONG g_OrigDoubleClickSpeed;
|
|
|
|
BOOL g_ClickLockEnabled; // = 0;
|
|
|
|
DWORD g_ClickLockTime; // = DEFAULT_CLICK_LOCK_TIME;
|
|
|
|
|
|
|
|
HICON hButtonLeft;
|
|
|
|
HICON hButtonRight;
|
|
|
|
|
|
|
|
HICON hIcon1;
|
|
|
|
HICON hIcon2;
|
|
|
|
BOOL bClicked;
|
|
|
|
} BUTTON_DATA, *PBUTTON_DATA;
|
|
|
|
|
|
|
|
|
2007-04-15 10:56:51 +00:00
|
|
|
typedef struct _POINTER_DATA
|
|
|
|
{
|
|
|
|
BOOL bDropShadow;
|
|
|
|
BOOL bOrigDropShadow;
|
|
|
|
|
2007-04-23 09:21:13 +00:00
|
|
|
INT cxCursor;
|
|
|
|
INT cyCursor;
|
2007-04-15 10:56:51 +00:00
|
|
|
} POINTER_DATA, *PPOINTER_DATA;
|
|
|
|
|
|
|
|
|
2007-04-14 20:07:16 +00:00
|
|
|
typedef struct _OPTION_DATA
|
|
|
|
{
|
|
|
|
ULONG ulMouseSensitivity;
|
|
|
|
ULONG ulOrigMouseSensitivity;
|
|
|
|
|
|
|
|
ULONG ulMouseSpeed; // = 1;
|
|
|
|
ULONG ulMouseThreshold1; // = DEFAULT_MOUSE_THRESHOLD1;
|
|
|
|
ULONG ulMouseThreshold2; // = DEFAULT_MOUSE_THRESHOLD2;
|
|
|
|
|
2007-04-15 10:56:51 +00:00
|
|
|
ULONG ulSnapToDefaultButton;
|
|
|
|
ULONG ulMouseTrails;
|
|
|
|
ULONG ulShowPointer;
|
|
|
|
ULONG ulHidePointer;
|
2007-04-14 20:07:16 +00:00
|
|
|
} OPTION_DATA, *POPTION_DATA;
|
|
|
|
|
|
|
|
|
2007-04-14 16:12:26 +00:00
|
|
|
typedef struct _WHEEL_DATA
|
|
|
|
{
|
|
|
|
UINT uWheelScrollLines;
|
|
|
|
} WHEEL_DATA, *PWHEEL_DATA;
|
|
|
|
|
|
|
|
|
2007-04-17 10:41:07 +00:00
|
|
|
typedef struct _CURSOR_DATA
|
|
|
|
{
|
|
|
|
UINT uStringId;
|
|
|
|
LPWSTR uDefaultCursorId;
|
|
|
|
HCURSOR hCursor;
|
|
|
|
TCHAR szCursorName[MAX_PATH];
|
|
|
|
TCHAR szCursorPath[MAX_PATH];
|
|
|
|
} CURSOR_DATA, *PCURSOR_DATA;
|
|
|
|
|
|
|
|
|
|
|
|
CURSOR_DATA g_CursorData[] =
|
|
|
|
{{IDS_ARROW, IDC_ARROW, 0, _T(""), _T("")},
|
|
|
|
{IDS_HELP, IDC_HELP, 0, _T(""), _T("")},
|
|
|
|
{IDS_APPSTARTING, IDC_APPSTARTING, 0, _T(""), _T("")},
|
|
|
|
{IDS_WAIT, IDC_WAIT, 0, _T(""), _T("")},
|
|
|
|
{IDS_CROSSHAIR, IDC_CROSS, 0, _T(""), _T("")},
|
|
|
|
{IDS_IBEAM, IDC_IBEAM, 0, _T(""), _T("")},
|
2007-04-19 15:00:56 +00:00
|
|
|
{IDS_NWPEN, 0/*IDC_NWPEN*/, 0, _T(""), _T("")}, /* FIXME */
|
2007-04-17 10:41:07 +00:00
|
|
|
{IDS_NO, IDC_NO, 0, _T(""), _T("")},
|
|
|
|
{IDS_SIZENS, IDC_SIZENS, 0, _T(""), _T("")},
|
|
|
|
{IDS_SIZEWE, IDC_SIZEWE, 0, _T(""), _T("")},
|
|
|
|
{IDS_SIZENWSE, IDC_SIZENWSE, 0, _T(""), _T("")},
|
|
|
|
{IDS_SIZENESW, IDC_SIZENESW, 0, _T(""), _T("")},
|
|
|
|
{IDS_SIZEALL, IDC_SIZEALL, 0, _T(""), _T("")},
|
|
|
|
{IDS_UPARROW, IDC_UPARROW, 0, _T(""), _T("")},
|
|
|
|
{IDS_HAND, IDC_HAND, 0, _T(""), _T("")}};
|
|
|
|
|
|
|
|
|
2007-04-19 15:00:56 +00:00
|
|
|
#if 0
|
|
|
|
static VOID
|
|
|
|
DebugMsg(LPTSTR fmt, ...)
|
|
|
|
{
|
|
|
|
TCHAR szBuffer[2048];
|
|
|
|
va_list marker;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-19 15:00:56 +00:00
|
|
|
va_start(marker, fmt);
|
|
|
|
_vstprintf(szBuffer, fmt, marker);
|
|
|
|
va_end(marker);
|
|
|
|
|
|
|
|
MessageBox(NULL, szBuffer, _T("Debug message"), MB_OK);
|
|
|
|
}
|
|
|
|
#endif
|
2007-04-17 10:41:07 +00:00
|
|
|
|
|
|
|
|
2005-11-25 17:02:18 +00:00
|
|
|
/* Property page dialog callback */
|
|
|
|
static INT_PTR CALLBACK
|
|
|
|
MouseHardwareProc(IN HWND hwndDlg,
|
2007-04-14 14:26:46 +00:00
|
|
|
IN UINT uMsg,
|
|
|
|
IN WPARAM wParam,
|
|
|
|
IN LPARAM lParam)
|
2005-11-25 17:02:18 +00:00
|
|
|
{
|
2006-05-03 13:45:22 +00:00
|
|
|
GUID Guids[1];
|
|
|
|
Guids[0] = GUID_DEVCLASS_MOUSE;
|
|
|
|
|
2006-07-09 21:10:40 +00:00
|
|
|
UNREFERENCED_PARAMETER(lParam);
|
|
|
|
UNREFERENCED_PARAMETER(wParam);
|
|
|
|
|
2005-11-25 17:02:18 +00:00
|
|
|
switch(uMsg)
|
|
|
|
{
|
|
|
|
case WM_INITDIALOG:
|
|
|
|
/* create the hardware page */
|
|
|
|
DeviceCreateHardwarePageEx(hwndDlg,
|
|
|
|
Guids,
|
|
|
|
sizeof(Guids) / sizeof(Guids[0]),
|
|
|
|
HWPD_STANDARDLIST);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
static INT_PTR CALLBACK
|
|
|
|
ClickLockProc(IN HWND hwndDlg,
|
2007-04-14 14:26:46 +00:00
|
|
|
IN UINT uMsg,
|
|
|
|
IN WPARAM wParam,
|
|
|
|
IN LPARAM lParam)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
HWND hDlgCtrl;
|
|
|
|
int pos;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
|
|
|
PBUTTON_DATA pButtonData;
|
|
|
|
|
|
|
|
pButtonData = (PBUTTON_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
|
2006-07-09 21:10:40 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
switch(uMsg)
|
|
|
|
{
|
|
|
|
case WM_INITDIALOG:
|
2007-04-14 14:26:46 +00:00
|
|
|
pButtonData = (PBUTTON_DATA)lParam;
|
|
|
|
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pButtonData);
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SLIDER_CLICK_LOCK);
|
|
|
|
SendMessage(hDlgCtrl, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(0, 10));
|
2007-04-14 14:26:46 +00:00
|
|
|
pos = (pButtonData->g_ClickLockTime - 200) / 200;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage(hDlgCtrl, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)pos);
|
|
|
|
return TRUE;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case WM_COMMAND:
|
|
|
|
if (LOWORD(wParam) == IDOK)
|
|
|
|
{
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SLIDER_CLICK_LOCK);
|
2007-04-14 14:26:46 +00:00
|
|
|
pButtonData->g_ClickLockTime = (DWORD) (SendMessage(hDlgCtrl, TBM_GETPOS, 0, 0) * 200) + 200;
|
2006-05-03 13:45:22 +00:00
|
|
|
EndDialog(hwndDlg, TRUE);
|
|
|
|
}
|
|
|
|
else if (LOWORD(wParam) == IDCANCEL)
|
|
|
|
{
|
|
|
|
EndDialog(hwndDlg, FALSE);
|
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
break;
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
static INT_PTR CALLBACK
|
|
|
|
ButtonProc(IN HWND hwndDlg,
|
2007-04-14 14:26:46 +00:00
|
|
|
IN UINT uMsg,
|
|
|
|
IN WPARAM wParam,
|
|
|
|
IN LPARAM lParam)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
HWND hDlgCtrl;
|
|
|
|
LRESULT lResult;
|
|
|
|
LPPSHNOTIFY lppsn;
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
PBUTTON_DATA pButtonData;
|
|
|
|
|
|
|
|
pButtonData = (PBUTTON_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
|
|
|
|
|
|
|
|
switch (uMsg)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
case WM_INITDIALOG:
|
2007-04-14 14:26:46 +00:00
|
|
|
pButtonData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BUTTON_DATA));
|
|
|
|
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pButtonData);
|
|
|
|
|
|
|
|
pButtonData->g_SwapMouseButtons = GetSystemMetrics(SM_SWAPBUTTON);
|
|
|
|
pButtonData->g_OrigSwapMouseButtons = pButtonData->g_SwapMouseButtons;
|
|
|
|
pButtonData->g_DoubleClickSpeed = GetDoubleClickTime();
|
|
|
|
pButtonData->g_OrigDoubleClickSpeed = pButtonData->g_DoubleClickSpeed;
|
|
|
|
|
|
|
|
/* Click lock time */
|
|
|
|
SystemParametersInfo(SPI_GETMOUSECLICKLOCK, 0, &pButtonData->g_ClickLockEnabled, 0);
|
|
|
|
SystemParametersInfo(SPI_GETMOUSECLICKLOCKTIME, 0, &pButtonData->g_ClickLockTime, 0);
|
2006-05-03 13:45:22 +00:00
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
/* Load mouse button icons */
|
|
|
|
pButtonData->hButtonLeft = LoadImage(hApplet, MAKEINTRESOURCE(IDI_MOUSE_LEFT), IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR);
|
|
|
|
pButtonData->hButtonRight = LoadImage(hApplet, MAKEINTRESOURCE(IDI_MOUSE_RIGHT), IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR);
|
2006-05-03 13:45:22 +00:00
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
/* Load folder icons */
|
|
|
|
pButtonData->hIcon1 = LoadImage(hApplet, MAKEINTRESOURCE(IDI_FOLDER_CLOSED), IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR);
|
|
|
|
pButtonData->hIcon2 = LoadImage(hApplet, MAKEINTRESOURCE(IDI_FOLDER_OPEN), IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR);
|
|
|
|
|
|
|
|
if (pButtonData->g_SwapMouseButtons)
|
|
|
|
{
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_SWAP_MOUSE_BUTTONS, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_IMAGE_SWAP_MOUSE, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pButtonData->hButtonRight);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_IMAGE_SWAP_MOUSE, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pButtonData->hButtonLeft);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (pButtonData->g_ClickLockEnabled)
|
|
|
|
{
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_CLICK_LOCK);
|
|
|
|
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_BUTTON_CLICK_LOCK);
|
|
|
|
EnableWindow(hDlgCtrl, FALSE);
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SLIDER_DOUBLE_CLICK_SPEED);
|
|
|
|
SendMessage(hDlgCtrl, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(0, 14));
|
|
|
|
SendMessage(hDlgCtrl, TBM_SETPOS, (WPARAM)TRUE, 14 - ((pButtonData->g_DoubleClickSpeed - 200) / 50));
|
|
|
|
|
|
|
|
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_IMAGE_DOUBLE_CLICK_SPEED, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pButtonData->hIcon1);
|
|
|
|
pButtonData->bClicked = TRUE;
|
2006-05-03 13:45:22 +00:00
|
|
|
return TRUE;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
|
|
|
case WM_DESTROY:
|
|
|
|
DestroyIcon(pButtonData->hButtonLeft);
|
|
|
|
DestroyIcon(pButtonData->hButtonRight);
|
|
|
|
DestroyIcon(pButtonData->hIcon1);
|
|
|
|
DestroyIcon(pButtonData->hIcon2);
|
|
|
|
HeapFree(GetProcessHeap(), 0, pButtonData);
|
|
|
|
break;
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case WM_COMMAND:
|
|
|
|
switch(LOWORD(wParam))
|
|
|
|
{
|
|
|
|
case IDC_SWAP_MOUSE_BUTTONS:
|
|
|
|
lResult = SendMessage((HWND)lParam, BM_GETCHECK, (WPARAM)0, (LPARAM)0);
|
|
|
|
if (lResult == BST_CHECKED)
|
|
|
|
{
|
2007-04-14 14:26:46 +00:00
|
|
|
pButtonData->g_SwapMouseButtons = FALSE;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
|
2007-04-14 14:26:46 +00:00
|
|
|
SendDlgItemMessage(hwndDlg, IDC_IMAGE_SWAP_MOUSE, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pButtonData->hButtonLeft);
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
else if (lResult == BST_UNCHECKED)
|
|
|
|
{
|
2007-04-14 14:26:46 +00:00
|
|
|
pButtonData->g_SwapMouseButtons = TRUE;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
2007-04-14 14:26:46 +00:00
|
|
|
SendDlgItemMessage(hwndDlg, IDC_IMAGE_SWAP_MOUSE, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pButtonData->hButtonRight);
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, pButtonData->g_SwapMouseButtons, NULL, SPIF_SENDCHANGE);
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
2006-05-03 13:45:22 +00:00
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case IDC_CHECK_CLICK_LOCK:
|
|
|
|
lResult = SendMessage((HWND)lParam, BM_GETCHECK, (WPARAM)0, (LPARAM)0);
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_BUTTON_CLICK_LOCK);
|
|
|
|
if (lResult == BST_CHECKED)
|
|
|
|
{
|
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
|
2007-04-14 14:26:46 +00:00
|
|
|
pButtonData->g_ClickLockEnabled = FALSE;
|
2006-05-03 13:45:22 +00:00
|
|
|
EnableWindow(hDlgCtrl, FALSE);
|
|
|
|
}
|
|
|
|
else if (lResult == BST_UNCHECKED)
|
|
|
|
{
|
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
|
|
|
EnableWindow(hDlgCtrl, TRUE);
|
2007-04-14 14:26:46 +00:00
|
|
|
pButtonData->g_ClickLockEnabled = TRUE;
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
2006-05-03 13:45:22 +00:00
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case IDC_BUTTON_CLICK_LOCK:
|
2007-04-14 14:26:46 +00:00
|
|
|
DialogBoxParam(hApplet, MAKEINTRESOURCE(IDD_CLICK_LOCK), hwndDlg, ClickLockProc, (LPARAM)pButtonData);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case IDC_IMAGE_DOUBLE_CLICK_SPEED:
|
|
|
|
if (HIWORD(wParam) == STN_DBLCLK)
|
|
|
|
{
|
|
|
|
pButtonData->bClicked = !pButtonData->bClicked;
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_IMAGE_DOUBLE_CLICK_SPEED, STM_SETIMAGE, IMAGE_ICON,
|
|
|
|
(LPARAM)(pButtonData->bClicked ? pButtonData->hIcon1 : pButtonData->hIcon2));
|
|
|
|
}
|
2006-05-03 13:45:22 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case WM_NOTIFY:
|
2007-04-14 14:26:46 +00:00
|
|
|
lppsn = (LPPSHNOTIFY) lParam;
|
2006-05-03 13:45:22 +00:00
|
|
|
if (lppsn->hdr.code == PSN_APPLY)
|
|
|
|
{
|
|
|
|
#if (WINVER >= 0x0500)
|
2007-04-14 14:26:46 +00:00
|
|
|
SystemParametersInfo(SPI_SETMOUSECLICKLOCK, pButtonData->g_ClickLockEnabled, NULL, SPIF_SENDCHANGE);
|
|
|
|
if (pButtonData->g_ClickLockEnabled)
|
|
|
|
SystemParametersInfo(SPI_SETMOUSECLICKLOCKTIME, pButtonData->g_ClickLockTime, NULL, SPIF_SENDCHANGE);
|
|
|
|
#endif
|
2006-05-03 13:45:22 +00:00
|
|
|
SetWindowLong(hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR);
|
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
else if (lppsn->hdr.code == PSN_RESET)
|
2006-05-06 11:10:27 +00:00
|
|
|
{
|
2007-04-14 14:26:46 +00:00
|
|
|
/* Reset swap mouse button setting */
|
|
|
|
SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, pButtonData->g_OrigSwapMouseButtons, NULL, SPIF_SENDCHANGE);
|
|
|
|
|
|
|
|
/* Reset double click speed setting */
|
|
|
|
// SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_OrigDoubleClickSpeed, NULL, SPIF_SENDCHANGE);
|
|
|
|
SetDoubleClickTime(pButtonData->g_OrigDoubleClickSpeed);
|
2006-05-06 11:10:27 +00:00
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
case WM_HSCROLL:
|
|
|
|
if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_SLIDER_DOUBLE_CLICK_SPEED))
|
2006-05-06 11:10:27 +00:00
|
|
|
{
|
2007-04-14 14:26:46 +00:00
|
|
|
switch (LOWORD(wParam))
|
|
|
|
{
|
|
|
|
case TB_LINEUP:
|
|
|
|
case TB_LINEDOWN:
|
|
|
|
case TB_PAGEUP:
|
|
|
|
case TB_PAGEDOWN:
|
|
|
|
case TB_TOP:
|
|
|
|
case TB_BOTTOM:
|
|
|
|
case TB_ENDTRACK:
|
|
|
|
lResult = SendDlgItemMessage(hwndDlg, IDC_SLIDER_DOUBLE_CLICK_SPEED, TBM_GETPOS, 0, 0);
|
|
|
|
pButtonData->g_DoubleClickSpeed = (14 - (INT)lResult) * 50 + 200;
|
|
|
|
// SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_DoubleClickSpeed, NULL, SPIF_SENDCHANGE);
|
|
|
|
SetDoubleClickTime(pButtonData->g_DoubleClickSpeed);
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TB_THUMBTRACK:
|
|
|
|
pButtonData->g_DoubleClickSpeed = (14 - (INT)HIWORD(wParam)) * 50 + 200;
|
|
|
|
// SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_DoubleClickSpeed, NULL, SPIF_SENDCHANGE);
|
|
|
|
SetDoubleClickTime(pButtonData->g_DoubleClickSpeed);
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
|
|
|
break;
|
|
|
|
}
|
2006-05-06 11:10:27 +00:00
|
|
|
}
|
|
|
|
break;
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
|
|
|
|
static BOOL
|
|
|
|
EnumerateCursorSchemes(HWND hwndDlg)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
HKEY hCuKey;
|
|
|
|
HKEY hCuCursorKey;
|
|
|
|
DWORD dwIndex;
|
|
|
|
TCHAR szValueName[MAX_PATH];
|
|
|
|
DWORD dwValueName;
|
|
|
|
TCHAR szSystemScheme[MAX_PATH];
|
|
|
|
TCHAR szValueData[2000];
|
|
|
|
DWORD dwValueData;
|
|
|
|
LONG dwResult;
|
|
|
|
HWND hDlgCtrl;
|
|
|
|
LRESULT lResult;
|
|
|
|
BOOL ProcessedHKLM = FALSE;
|
2007-04-18 15:42:13 +00:00
|
|
|
TCHAR szCurrentScheme[MAX_PATH];
|
|
|
|
DWORD dwCurrentScheme;
|
|
|
|
INT nSchemeIndex;
|
|
|
|
INT i, nCount;
|
2007-04-19 15:00:56 +00:00
|
|
|
LPTSTR p;
|
2006-05-03 13:45:22 +00:00
|
|
|
|
|
|
|
if (RegOpenCurrentUser(KEY_READ, &hCuKey) != ERROR_SUCCESS)
|
|
|
|
return FALSE;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
if (RegOpenKeyEx(hCuKey, _T("Control Panel\\Cursors\\Schemes"), 0, KEY_READ, &hCuCursorKey) != ERROR_SUCCESS)
|
|
|
|
{
|
|
|
|
RegCloseKey(hCuKey);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_COMBO_CURSOR_SCHEME);
|
|
|
|
SendMessage(hDlgCtrl, CB_RESETCONTENT, 0, 0);
|
|
|
|
dwIndex = 0;
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
for (;;)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
dwValueName = sizeof(szValueName) / sizeof(TCHAR);
|
|
|
|
dwValueData = sizeof(szValueData) / sizeof(TCHAR);
|
|
|
|
dwResult = RegEnumValue(hCuCursorKey, dwIndex, szValueName, &dwValueName, NULL, NULL, (LPBYTE)szValueData, &dwValueData);
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
if (dwResult == ERROR_NO_MORE_ITEMS)
|
|
|
|
{
|
2007-04-15 10:56:51 +00:00
|
|
|
if (!ProcessedHKLM)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
RegCloseKey(hCuCursorKey);
|
|
|
|
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
|
|
|
|
_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Cursors\\Schemes"),
|
|
|
|
0, KEY_READ, &hCuCursorKey);
|
|
|
|
if (dwResult == ERROR_SUCCESS)
|
|
|
|
{
|
|
|
|
dwIndex = 0;
|
|
|
|
ProcessedHKLM = TRUE;
|
|
|
|
LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-15 10:56:51 +00:00
|
|
|
if (_tcslen(szValueData) > 0)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
TCHAR * copy = _tcsdup(szValueData);
|
|
|
|
if (ProcessedHKLM)
|
2007-04-14 14:26:46 +00:00
|
|
|
{
|
|
|
|
_tcscat(szValueName, TEXT(" "));
|
2006-05-03 13:45:22 +00:00
|
|
|
_tcscat(szValueName, szSystemScheme);
|
2007-04-14 14:26:46 +00:00
|
|
|
}
|
|
|
|
lResult = SendMessage(hDlgCtrl, CB_ADDSTRING, (WPARAM)0, (LPARAM)szValueName);
|
|
|
|
SendMessage(hDlgCtrl, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)copy);
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
dwIndex++;
|
2007-04-14 14:26:46 +00:00
|
|
|
}
|
2006-05-03 13:45:22 +00:00
|
|
|
|
|
|
|
RegCloseKey(hCuCursorKey);
|
|
|
|
RegCloseKey(hCuKey);
|
|
|
|
|
2007-04-18 15:42:13 +00:00
|
|
|
/* Add the "(none)" entry */
|
2006-05-03 13:45:22 +00:00
|
|
|
LoadString(hApplet, IDS_NONE, szSystemScheme, MAX_PATH);
|
2007-04-14 14:26:46 +00:00
|
|
|
lResult = SendMessage(hDlgCtrl, CB_ADDSTRING, (WPARAM)0, (LPARAM)szSystemScheme);
|
|
|
|
SendMessage(hDlgCtrl, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)NULL);
|
2007-04-18 15:42:13 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* Get the name of the current cursor scheme */
|
|
|
|
szCurrentScheme[0] = 0;
|
|
|
|
if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Control Panel\\Cursors"), 0, KEY_READ, &hCuCursorKey) == ERROR_SUCCESS)
|
|
|
|
{
|
|
|
|
dwCurrentScheme = sizeof(szCurrentScheme) / sizeof(TCHAR);
|
|
|
|
if (RegQueryValueEx(hCuCursorKey, NULL, NULL, NULL, (LPBYTE)szCurrentScheme, &dwCurrentScheme))
|
|
|
|
szCurrentScheme[0] = 0;
|
|
|
|
RegCloseKey(hCuCursorKey);
|
|
|
|
}
|
|
|
|
|
2007-04-19 15:00:56 +00:00
|
|
|
/* Search for the matching entry in the cursor scheme list */
|
|
|
|
LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH);
|
2007-04-18 15:42:13 +00:00
|
|
|
nSchemeIndex = -1;
|
|
|
|
nCount = (INT)SendMessage(hDlgCtrl, CB_GETCOUNT, 0, 0);
|
|
|
|
for (i = 0; i < nCount; i++)
|
|
|
|
{
|
|
|
|
SendMessage(hDlgCtrl, CB_GETLBTEXT, i, (LPARAM)szValueName);
|
|
|
|
|
2007-04-19 15:00:56 +00:00
|
|
|
p = _tcsstr(szValueName, szSystemScheme);
|
|
|
|
if (p)
|
|
|
|
{
|
|
|
|
p -= 1;
|
|
|
|
*p = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_tcscmp(szValueName, szCurrentScheme) == 0)
|
2007-04-18 15:42:13 +00:00
|
|
|
{
|
|
|
|
nSchemeIndex = (INT)i;
|
2007-04-19 15:00:56 +00:00
|
|
|
break;
|
2007-04-18 15:42:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-04-19 15:00:56 +00:00
|
|
|
/* Select the matching entry */
|
2007-04-18 15:42:13 +00:00
|
|
|
if (nSchemeIndex != -1)
|
|
|
|
SendMessage(hDlgCtrl, CB_SETCURSEL, (WPARAM)nSchemeIndex, (LPARAM)0);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
SendMessage(hDlgCtrl, CB_SETCURSEL, (WPARAM)lResult, (LPARAM)0);
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_BUTTON_DELETE_SCHEME);
|
|
|
|
EnableWindow(hDlgCtrl, FALSE);
|
|
|
|
}
|
2006-05-03 13:45:22 +00:00
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
static VOID
|
2007-04-18 15:42:13 +00:00
|
|
|
RefreshCursorList(HWND hwndDlg, BOOL bInit)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
2007-04-19 15:00:56 +00:00
|
|
|
INT index;
|
|
|
|
INT i;
|
|
|
|
INT nSel;
|
2006-05-03 13:45:22 +00:00
|
|
|
|
2007-04-19 15:00:56 +00:00
|
|
|
nSel = bInit ? 0 : SendDlgItemMessage(hwndDlg, IDC_LISTBOX_CURSOR, LB_GETCURSEL, 0, 0);
|
2007-04-18 15:42:13 +00:00
|
|
|
|
2007-04-20 11:02:35 +00:00
|
|
|
if (bInit)
|
2007-04-17 10:41:07 +00:00
|
|
|
{
|
2007-04-20 11:02:35 +00:00
|
|
|
SendDlgItemMessage(hwndDlg, IDC_LISTBOX_CURSOR, LB_RESETCONTENT, 0, 0);
|
|
|
|
for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++)
|
|
|
|
{
|
|
|
|
LoadString(hApplet, index, g_CursorData[i].szCursorName, MAX_PATH);
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_LISTBOX_CURSOR, LB_ADDSTRING, 0, (LPARAM)i);
|
|
|
|
}
|
|
|
|
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_LISTBOX_CURSOR, LB_SETCURSEL, nSel, 0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
InvalidateRect(GetDlgItem(hwndDlg, IDC_LISTBOX_CURSOR), NULL, FALSE);
|
2007-04-17 10:41:07 +00:00
|
|
|
}
|
2007-04-18 15:42:13 +00:00
|
|
|
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_IMAGE_CURRENT_CURSOR, STM_SETIMAGE, IMAGE_CURSOR,
|
|
|
|
(LPARAM)g_CursorData[nSel].hCursor);
|
2007-04-21 14:56:23 +00:00
|
|
|
|
|
|
|
EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_USE_DEFAULT_CURSOR), (g_CursorData[nSel].szCursorPath[0] != 0));
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
|
|
|
|
static BOOL
|
2007-04-21 14:56:23 +00:00
|
|
|
DeleteUserCursorScheme(HWND hwndDlg)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
2007-04-21 14:56:23 +00:00
|
|
|
TCHAR szSchemeName[MAX_PATH];
|
2007-04-22 17:55:11 +00:00
|
|
|
TCHAR szTitle[128];
|
|
|
|
TCHAR szRawText[256];
|
|
|
|
TCHAR szText[256];
|
2007-04-21 14:56:23 +00:00
|
|
|
HWND hDlgCtrl;
|
2006-05-03 13:45:22 +00:00
|
|
|
HKEY hCuKey;
|
|
|
|
HKEY hCuCursorKey;
|
2007-04-21 14:56:23 +00:00
|
|
|
LONG lResult;
|
|
|
|
INT nSel;
|
|
|
|
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_COMBO_CURSOR_SCHEME);
|
|
|
|
nSel = SendMessage(hDlgCtrl, CB_GETCURSEL, 0, 0);
|
|
|
|
if (nSel == CB_ERR)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
SendMessage(hDlgCtrl, CB_GETLBTEXT, nSel, (LPARAM)szSchemeName);
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-22 17:55:11 +00:00
|
|
|
LoadString(hApplet, IDS_REMOVE_TITLE, szTitle, 128);
|
|
|
|
LoadString(hApplet, IDS_REMOVE_TEXT, szRawText, 256);
|
|
|
|
|
|
|
|
_stprintf(szText, szRawText, szSchemeName);
|
|
|
|
|
|
|
|
/* Confirm scheme removal */
|
|
|
|
if (MessageBox(hwndDlg, szText, szTitle, MB_YESNO | MB_ICONQUESTION) == IDNO)
|
|
|
|
return TRUE;
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
if (RegOpenCurrentUser(KEY_READ | KEY_SET_VALUE, &hCuKey) != ERROR_SUCCESS)
|
|
|
|
return FALSE;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
if (RegOpenKeyEx(hCuKey, _T("Control Panel\\Cursors\\Schemes"), 0, KEY_READ | KEY_SET_VALUE, &hCuCursorKey) != ERROR_SUCCESS)
|
|
|
|
{
|
|
|
|
RegCloseKey(hCuKey);
|
|
|
|
return FALSE;
|
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-21 14:56:23 +00:00
|
|
|
lResult = RegDeleteValue(hCuCursorKey, szSchemeName);
|
2006-05-03 13:45:22 +00:00
|
|
|
|
|
|
|
RegCloseKey(hCuCursorKey);
|
|
|
|
RegCloseKey(hCuKey);
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-21 14:56:23 +00:00
|
|
|
if (lResult == ERROR_SUCCESS)
|
|
|
|
{
|
|
|
|
SendMessage(hDlgCtrl, CB_DELETESTRING, nSel, 0);
|
|
|
|
SendMessage(hDlgCtrl, CB_SETCURSEL, (WPARAM)0, (LPARAM)0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return (lResult == ERROR_SUCCESS);
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
static INT_PTR CALLBACK
|
|
|
|
SaveSchemeProc(IN HWND hwndDlg,
|
2007-04-14 14:26:46 +00:00
|
|
|
IN UINT uMsg,
|
|
|
|
IN WPARAM wParam,
|
|
|
|
IN LPARAM lParam)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
2007-04-22 15:11:04 +00:00
|
|
|
LPTSTR pSchemeName;
|
2006-05-03 13:45:22 +00:00
|
|
|
|
2007-04-22 15:11:04 +00:00
|
|
|
switch (uMsg)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
2007-04-22 15:11:04 +00:00
|
|
|
case WM_INITDIALOG:
|
|
|
|
pSchemeName = (LPTSTR)lParam;
|
|
|
|
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pSchemeName);
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_EDIT_SCHEME_NAME, WM_SETTEXT,
|
|
|
|
0, (LPARAM)pSchemeName);
|
|
|
|
break;
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case WM_COMMAND:
|
|
|
|
if (LOWORD(wParam) == IDOK)
|
|
|
|
{
|
2007-04-22 15:11:04 +00:00
|
|
|
pSchemeName = (LPTSTR)GetWindowLongPtr(hwndDlg, DWLP_USER);
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_EDIT_SCHEME_NAME, WM_GETTEXT,
|
|
|
|
(WPARAM)MAX_PATH, (LPARAM)pSchemeName);
|
2006-05-03 13:45:22 +00:00
|
|
|
EndDialog(hwndDlg, TRUE);
|
|
|
|
}
|
|
|
|
else if (LOWORD(wParam) == IDCANCEL)
|
|
|
|
{
|
|
|
|
EndDialog(hwndDlg, FALSE);
|
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
break;
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-22 15:11:04 +00:00
|
|
|
static BOOL
|
|
|
|
SaveCursorScheme(HWND hwndDlg)
|
|
|
|
{
|
|
|
|
TCHAR szSystemScheme[MAX_PATH];
|
|
|
|
TCHAR szSchemeName[MAX_PATH];
|
2007-04-22 17:55:11 +00:00
|
|
|
TCHAR szNewSchemeName[MAX_PATH];
|
|
|
|
TCHAR szTitle[128];
|
|
|
|
TCHAR szText[256];
|
2007-04-22 15:11:04 +00:00
|
|
|
INT nSel;
|
|
|
|
INT index, i, nLength;
|
|
|
|
LPTSTR lpSchemeData;
|
|
|
|
HKEY hCuKey;
|
|
|
|
HKEY hCuCursorKey;
|
|
|
|
LONG lResult = ERROR_SUCCESS;
|
2007-04-22 17:55:11 +00:00
|
|
|
BOOL bSchemeExists;
|
|
|
|
|
|
|
|
LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH);
|
2007-04-22 15:11:04 +00:00
|
|
|
|
|
|
|
nSel = SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETCURSEL, 0, 0);
|
|
|
|
if (nSel == CB_ERR)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
if (nSel == 0)
|
|
|
|
{
|
|
|
|
szSchemeName[0] = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-04-22 17:55:11 +00:00
|
|
|
SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETLBTEXT, nSel, (LPARAM)szNewSchemeName);
|
2007-04-22 15:11:04 +00:00
|
|
|
|
2007-04-22 17:55:11 +00:00
|
|
|
if (_tcsstr(szNewSchemeName, szSystemScheme))
|
2007-04-22 15:11:04 +00:00
|
|
|
{
|
2007-04-22 17:55:11 +00:00
|
|
|
szNewSchemeName[_tcslen(szNewSchemeName) - _tcslen(szSystemScheme) - 1] = 0;
|
2007-04-22 15:11:04 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-04-22 17:55:11 +00:00
|
|
|
/* Ask for a name for the new cursor scheme */
|
|
|
|
if (!DialogBoxParam(hApplet, MAKEINTRESOURCE(IDD_CURSOR_SCHEME_SAVEAS),
|
|
|
|
hwndDlg, SaveSchemeProc, (LPARAM)szNewSchemeName))
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
/* Check all non-system schemes for the new name */
|
|
|
|
nSel = SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETCOUNT, 0, 0);
|
|
|
|
if (nSel == CB_ERR)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
bSchemeExists = FALSE;
|
|
|
|
for (i = 0; i < nSel; i++)
|
2007-04-22 15:11:04 +00:00
|
|
|
{
|
2007-04-22 17:55:11 +00:00
|
|
|
SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETLBTEXT, i, (LPARAM)szSchemeName);
|
|
|
|
if (_tcsstr(szSchemeName, szSystemScheme) == NULL)
|
2007-04-22 15:11:04 +00:00
|
|
|
{
|
2007-04-22 17:55:11 +00:00
|
|
|
if (_tcscmp(szSchemeName, szNewSchemeName) == 0)
|
|
|
|
{
|
|
|
|
bSchemeExists = TRUE;
|
|
|
|
break;
|
|
|
|
}
|
2007-04-22 15:11:04 +00:00
|
|
|
}
|
2007-04-22 17:55:11 +00:00
|
|
|
}
|
2007-04-22 15:11:04 +00:00
|
|
|
|
2007-04-22 17:55:11 +00:00
|
|
|
if (bSchemeExists)
|
|
|
|
{
|
|
|
|
LoadString(hApplet, IDS_OVERWRITE_TITLE, szTitle, 128);
|
|
|
|
LoadString(hApplet, IDS_OVERWRITE_TEXT, szText, 256);
|
2007-04-22 15:11:04 +00:00
|
|
|
|
2007-04-22 17:55:11 +00:00
|
|
|
/* Confirm scheme overwrite */
|
|
|
|
if (MessageBox(hwndDlg, szText, szTitle, MB_YESNO | MB_ICONQUESTION) == IDNO)
|
|
|
|
return TRUE;
|
|
|
|
}
|
2007-04-22 15:11:04 +00:00
|
|
|
|
2007-04-22 17:55:11 +00:00
|
|
|
/* Save the cursor scheme */
|
|
|
|
nLength = 0;
|
|
|
|
for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++)
|
|
|
|
{
|
|
|
|
if (i > 0)
|
|
|
|
nLength++;
|
|
|
|
nLength += _tcslen(g_CursorData[i].szCursorPath);
|
|
|
|
}
|
|
|
|
nLength++;
|
2007-04-22 15:11:04 +00:00
|
|
|
|
2007-04-22 17:55:11 +00:00
|
|
|
lpSchemeData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, nLength * sizeof(TCHAR));
|
2007-04-22 15:11:04 +00:00
|
|
|
|
2007-04-22 17:55:11 +00:00
|
|
|
for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++)
|
|
|
|
{
|
|
|
|
if (i > 0)
|
|
|
|
_tcscat(lpSchemeData, _T(","));
|
|
|
|
_tcscat(lpSchemeData, g_CursorData[i].szCursorPath);
|
|
|
|
}
|
2007-04-22 15:11:04 +00:00
|
|
|
|
2007-04-22 17:55:11 +00:00
|
|
|
if (RegOpenCurrentUser(KEY_READ | KEY_SET_VALUE, &hCuKey) != ERROR_SUCCESS)
|
|
|
|
return FALSE;
|
2007-04-22 15:11:04 +00:00
|
|
|
|
2007-04-22 17:55:11 +00:00
|
|
|
if (RegOpenKeyEx(hCuKey, _T("Control Panel\\Cursors\\Schemes"), 0, KEY_READ | KEY_SET_VALUE, &hCuCursorKey) != ERROR_SUCCESS)
|
|
|
|
{
|
|
|
|
RegCloseKey(hCuKey);
|
|
|
|
return FALSE;
|
2007-04-22 15:11:04 +00:00
|
|
|
}
|
|
|
|
|
2007-04-22 17:55:11 +00:00
|
|
|
lResult = RegSetValueEx(hCuCursorKey, szNewSchemeName, 0, REG_EXPAND_SZ,
|
|
|
|
(LPBYTE)lpSchemeData, nLength * sizeof(TCHAR));
|
|
|
|
|
|
|
|
RegCloseKey(hCuCursorKey);
|
|
|
|
RegCloseKey(hCuKey);
|
|
|
|
|
|
|
|
HeapFree(GetProcessHeap(), 0, lpSchemeData);
|
|
|
|
|
2007-04-22 15:11:04 +00:00
|
|
|
return (lResult == ERROR_SUCCESS);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
static BOOL
|
2007-04-21 14:56:23 +00:00
|
|
|
BrowseCursor(HWND hwndDlg)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
2007-04-21 14:56:23 +00:00
|
|
|
TCHAR szFileName[MAX_PATH];
|
2007-04-22 15:11:04 +00:00
|
|
|
TCHAR szFilter[MAX_PATH];
|
|
|
|
TCHAR szTitle[MAX_PATH];
|
2006-05-03 13:45:22 +00:00
|
|
|
OPENFILENAME ofn;
|
2007-04-21 14:56:23 +00:00
|
|
|
INT nSel;
|
|
|
|
|
2007-04-22 15:11:04 +00:00
|
|
|
LoadString(hApplet, IDS_BROWSE_FILTER, szFilter, MAX_PATH);
|
|
|
|
LoadString(hApplet, IDS_BROWSE_TITLE, szTitle, MAX_PATH);
|
2006-05-03 13:45:22 +00:00
|
|
|
|
2007-04-21 14:56:23 +00:00
|
|
|
memset(szFileName, 0x0, sizeof(szFileName));
|
|
|
|
nSel = SendDlgItemMessage(hwndDlg, IDC_LISTBOX_CURSOR, LB_GETCURSEL, 0, 0);
|
|
|
|
if (nSel == LB_ERR)
|
|
|
|
{
|
2007-04-22 15:11:04 +00:00
|
|
|
MessageBox(hwndDlg, _T("LB_ERR"), _T(""), MB_ICONERROR);
|
2007-04-21 14:56:23 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
ZeroMemory(&ofn, sizeof(OPENFILENAME));
|
|
|
|
ofn.lStructSize = sizeof(OPENFILENAME);
|
|
|
|
ofn.hwndOwner = hwndDlg;
|
|
|
|
ofn.lpstrFilter = szFilter;
|
|
|
|
ofn.nFilterIndex = 1;
|
|
|
|
ofn.lpstrFile = szFileName;
|
|
|
|
ofn.nMaxFile = MAX_PATH;
|
|
|
|
ofn.lpstrInitialDir = _T("%WINDIR%\\Cursors");
|
2007-04-22 15:11:04 +00:00
|
|
|
ofn.lpstrTitle = szTitle;
|
2006-05-03 13:45:22 +00:00
|
|
|
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST;
|
|
|
|
|
2007-04-21 14:56:23 +00:00
|
|
|
if (!GetOpenFileName(&ofn))
|
2006-05-03 13:45:22 +00:00
|
|
|
return FALSE;
|
2007-04-21 14:56:23 +00:00
|
|
|
|
|
|
|
/* Store the new cursor file path */
|
|
|
|
_tcsncpy(g_CursorData[nSel].szCursorPath, szFileName, MAX_PATH);
|
|
|
|
|
|
|
|
return TRUE;
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
static VOID
|
2007-04-21 14:56:23 +00:00
|
|
|
LoadCursorScheme(LPTSTR lpName, BOOL bSystem)
|
2007-04-14 14:26:46 +00:00
|
|
|
{
|
2007-04-17 10:41:07 +00:00
|
|
|
UINT index, i;
|
|
|
|
|
|
|
|
for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++)
|
|
|
|
{
|
|
|
|
if (g_CursorData[i].hCursor != NULL)
|
|
|
|
{
|
|
|
|
DestroyCursor(g_CursorData[i].hCursor);
|
|
|
|
g_CursorData[i].hCursor = 0;
|
|
|
|
}
|
2007-04-18 15:42:13 +00:00
|
|
|
g_CursorData[i].szCursorPath[0] = 0;
|
2007-04-17 10:41:07 +00:00
|
|
|
}
|
|
|
|
|
2007-04-20 11:02:35 +00:00
|
|
|
if (lpName != NULL)
|
2007-04-17 10:41:07 +00:00
|
|
|
{
|
2007-04-18 15:42:13 +00:00
|
|
|
LPTSTR pStart = lpName;
|
|
|
|
LPTSTR pEnd = pStart;
|
|
|
|
INT nLength;
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
while (pEnd)
|
|
|
|
{
|
|
|
|
pEnd = _tcschr(pStart, _T(','));
|
|
|
|
if (pEnd)
|
|
|
|
nLength = ((INT_PTR)pEnd - (INT_PTR)pStart) / sizeof(TCHAR);
|
|
|
|
else
|
|
|
|
nLength = _tcslen(pStart);
|
|
|
|
|
|
|
|
_tcsncpy(g_CursorData[i].szCursorPath, pStart, nLength);
|
|
|
|
g_CursorData[i].szCursorPath[nLength] = 0;
|
|
|
|
|
|
|
|
pStart = pStart + (nLength + 1);
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2007-04-17 10:41:07 +00:00
|
|
|
|
2007-04-18 15:42:13 +00:00
|
|
|
for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++)
|
|
|
|
{
|
|
|
|
if (g_CursorData[i].szCursorPath[0] == 0)
|
2007-04-21 14:56:23 +00:00
|
|
|
g_CursorData[i].hCursor = (HCURSOR)LoadImage(NULL, g_CursorData[i].uDefaultCursorId,
|
|
|
|
IMAGE_CURSOR, 0, 0,
|
|
|
|
LR_DEFAULTSIZE | LR_SHARED);
|
2007-04-18 15:42:13 +00:00
|
|
|
else
|
|
|
|
g_CursorData[i].hCursor = (HCURSOR)LoadImage(NULL, g_CursorData[i].szCursorPath,
|
|
|
|
IMAGE_CURSOR, 0, 0,
|
|
|
|
LR_LOADFROMFILE | LR_DEFAULTSIZE);
|
2007-04-17 10:41:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-04-19 15:00:56 +00:00
|
|
|
static VOID
|
|
|
|
ReloadCurrentCursorScheme(VOID)
|
|
|
|
{
|
|
|
|
UINT index, i;
|
|
|
|
|
|
|
|
for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++)
|
|
|
|
{
|
|
|
|
if (g_CursorData[i].hCursor != NULL)
|
|
|
|
DestroyCursor(g_CursorData[i].hCursor);
|
|
|
|
|
|
|
|
if (g_CursorData[i].szCursorPath[0] == 0)
|
2007-04-21 14:56:23 +00:00
|
|
|
g_CursorData[i].hCursor = (HCURSOR)LoadImage(NULL, g_CursorData[i].uDefaultCursorId,
|
|
|
|
IMAGE_CURSOR, 0, 0,
|
|
|
|
LR_DEFAULTSIZE | LR_SHARED);
|
2007-04-19 15:00:56 +00:00
|
|
|
else
|
|
|
|
g_CursorData[i].hCursor = (HCURSOR)LoadImage(NULL, g_CursorData[i].szCursorPath,
|
|
|
|
IMAGE_CURSOR, 0, 0,
|
|
|
|
LR_LOADFROMFILE | LR_DEFAULTSIZE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-04-17 10:41:07 +00:00
|
|
|
static VOID
|
|
|
|
OnDrawItem(UINT idCtl,
|
2007-04-23 09:21:13 +00:00
|
|
|
LPDRAWITEMSTRUCT lpdis,
|
|
|
|
PPOINTER_DATA pPointerData)
|
2007-04-17 10:41:07 +00:00
|
|
|
{
|
|
|
|
RECT rc;
|
|
|
|
|
|
|
|
if (lpdis->itemState & ODS_SELECTED)
|
|
|
|
{
|
|
|
|
FillRect(lpdis->hDC,
|
|
|
|
&lpdis->rcItem,
|
|
|
|
(HBRUSH)(COLOR_HIGHLIGHT + 1));
|
|
|
|
SetBkColor(lpdis->hDC,
|
|
|
|
GetSysColor(COLOR_HIGHLIGHT));
|
|
|
|
SetTextColor(lpdis->hDC,
|
|
|
|
GetSysColor(COLOR_HIGHLIGHTTEXT));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
FillRect(lpdis->hDC,
|
|
|
|
&lpdis->rcItem,
|
|
|
|
(HBRUSH)(COLOR_WINDOW + 1));
|
|
|
|
SetBkColor(lpdis->hDC,
|
|
|
|
GetSysColor(COLOR_WINDOW));
|
|
|
|
SetTextColor(lpdis->hDC,
|
|
|
|
GetSysColor(COLOR_WINDOWTEXT));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lpdis->itemID != -1)
|
|
|
|
{
|
|
|
|
CopyRect(&rc, &lpdis->rcItem);
|
|
|
|
rc.left += 5;
|
|
|
|
DrawText(lpdis->hDC,
|
|
|
|
g_CursorData[lpdis->itemData].szCursorName,
|
|
|
|
-1,
|
|
|
|
&rc,
|
|
|
|
DT_SINGLELINE | DT_VCENTER | DT_LEFT);
|
|
|
|
|
|
|
|
if (g_CursorData[lpdis->itemData].hCursor != NULL)
|
|
|
|
{
|
|
|
|
DrawIcon(lpdis->hDC,
|
2007-04-23 09:21:13 +00:00
|
|
|
lpdis->rcItem.right - pPointerData->cxCursor - 4,
|
2007-04-17 10:41:07 +00:00
|
|
|
lpdis->rcItem.top + 2,
|
|
|
|
g_CursorData[lpdis->itemData].hCursor);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lpdis->itemState & ODS_FOCUS)
|
|
|
|
{
|
|
|
|
CopyRect(&rc, &lpdis->rcItem);
|
|
|
|
InflateRect(&rc, -1, -1);
|
|
|
|
DrawFocusRect(lpdis->hDC, &rc);
|
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-04-21 14:56:23 +00:00
|
|
|
static VOID
|
|
|
|
LoadNewCursorScheme(HWND hwndDlg, BOOL bInit)
|
|
|
|
{
|
|
|
|
TCHAR buffer[MAX_PATH];
|
|
|
|
TCHAR szSystemScheme[MAX_PATH];
|
|
|
|
HWND hDlgCtrl;
|
|
|
|
BOOL bEnable;
|
|
|
|
LPTSTR lpName;
|
|
|
|
INT nSel;
|
|
|
|
|
|
|
|
nSel = SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETCURSEL, 0, 0);
|
|
|
|
if (nSel == CB_ERR)
|
|
|
|
return;
|
|
|
|
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETLBTEXT, nSel, (LPARAM)buffer);
|
|
|
|
|
|
|
|
LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH);
|
|
|
|
if (_tcsstr(buffer, szSystemScheme) || nSel == 0) //avoid the default scheme can be deleted
|
|
|
|
bEnable = FALSE;
|
|
|
|
else
|
|
|
|
bEnable = TRUE;
|
|
|
|
|
|
|
|
/* delete button */
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_BUTTON_DELETE_SCHEME);
|
|
|
|
EnableWindow(hDlgCtrl, bEnable);
|
|
|
|
|
|
|
|
lpName = (LPTSTR)SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETITEMDATA, nSel, 0);
|
|
|
|
LoadCursorScheme(lpName, !bEnable);
|
|
|
|
RefreshCursorList(hwndDlg, bInit);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-04-22 15:11:04 +00:00
|
|
|
static BOOL
|
|
|
|
ApplyCursorScheme(HWND hwndDlg)
|
|
|
|
{
|
|
|
|
/* FIXME: Apply the cursor scheme */
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
static INT_PTR CALLBACK
|
|
|
|
PointerProc(IN HWND hwndDlg,
|
2007-04-14 14:26:46 +00:00
|
|
|
IN UINT uMsg,
|
|
|
|
IN WPARAM wParam,
|
|
|
|
IN LPARAM lParam)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
2007-04-15 10:56:51 +00:00
|
|
|
PPOINTER_DATA pPointerData;
|
2007-04-21 14:56:23 +00:00
|
|
|
LPPSHNOTIFY lppsn;
|
|
|
|
INT nSel;
|
2007-04-15 10:56:51 +00:00
|
|
|
|
|
|
|
pPointerData = (PPOINTER_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
|
|
|
|
|
2007-04-21 14:56:23 +00:00
|
|
|
switch (uMsg)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
case WM_INITDIALOG:
|
2007-04-15 10:56:51 +00:00
|
|
|
pPointerData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(POINTER_DATA));
|
|
|
|
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pPointerData);
|
|
|
|
|
2007-04-23 09:21:13 +00:00
|
|
|
pPointerData->cxCursor = GetSystemMetrics(SM_CXCURSOR);
|
|
|
|
pPointerData->cyCursor = GetSystemMetrics(SM_CYCURSOR);
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
EnumerateCursorSchemes(hwndDlg);
|
2007-04-21 14:56:23 +00:00
|
|
|
LoadNewCursorScheme(hwndDlg, TRUE);
|
2007-04-15 10:56:51 +00:00
|
|
|
|
|
|
|
/* Get drop shadow setting */
|
|
|
|
if (!SystemParametersInfo(SPI_GETDROPSHADOW, 0, &pPointerData->bDropShadow, 0))
|
|
|
|
pPointerData->bDropShadow = FALSE;
|
|
|
|
|
|
|
|
pPointerData->bOrigDropShadow = pPointerData->bDropShadow;
|
|
|
|
|
|
|
|
if (pPointerData->bDropShadow)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
2007-04-21 14:56:23 +00:00
|
|
|
SendDlgItemMessage(hwndDlg, IDC_CHECK_DROP_SHADOW, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
2007-04-15 10:56:51 +00:00
|
|
|
|
2007-04-17 10:41:07 +00:00
|
|
|
if ((INT)wParam == IDC_LISTBOX_CURSOR)
|
2006-05-03 13:45:22 +00:00
|
|
|
return TRUE;
|
|
|
|
else
|
|
|
|
return FALSE;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-17 10:41:07 +00:00
|
|
|
case WM_MEASUREITEM:
|
2007-04-23 09:21:13 +00:00
|
|
|
((LPMEASUREITEMSTRUCT)lParam)->itemHeight = GetSystemMetrics(SM_CYCURSOR) + 4;
|
2007-04-17 10:41:07 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case WM_DRAWITEM:
|
|
|
|
if (wParam == IDC_LISTBOX_CURSOR)
|
2007-04-23 09:21:13 +00:00
|
|
|
OnDrawItem((UINT)wParam, (LPDRAWITEMSTRUCT)lParam, pPointerData);
|
2007-04-17 10:41:07 +00:00
|
|
|
return TRUE;
|
|
|
|
|
2007-04-15 10:56:51 +00:00
|
|
|
case WM_DESTROY:
|
|
|
|
HeapFree(GetProcessHeap(), 0, pPointerData);
|
|
|
|
break;
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case WM_NOTIFY:
|
2007-04-15 10:56:51 +00:00
|
|
|
lppsn = (LPPSHNOTIFY) lParam;
|
2006-05-03 13:45:22 +00:00
|
|
|
if (lppsn->hdr.code == PSN_APPLY)
|
|
|
|
{
|
2007-04-22 15:11:04 +00:00
|
|
|
ApplyCursorScheme(hwndDlg);
|
2006-05-03 13:45:22 +00:00
|
|
|
#if (WINVER >= 0x0500)
|
2007-04-15 10:56:51 +00:00
|
|
|
SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID)pPointerData->bDropShadow, SPIF_SENDCHANGE);
|
2006-05-03 13:45:22 +00:00
|
|
|
#endif
|
|
|
|
return TRUE;
|
|
|
|
}
|
2007-04-15 10:56:51 +00:00
|
|
|
else if (lppsn->hdr.code == PSN_RESET)
|
|
|
|
{
|
|
|
|
#if (WINVER >= 0x0500)
|
|
|
|
SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID)pPointerData->bOrigDropShadow, SPIF_SENDCHANGE);
|
|
|
|
#endif
|
|
|
|
}
|
2006-05-03 13:45:22 +00:00
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case WM_COMMAND:
|
2007-04-17 10:41:07 +00:00
|
|
|
switch (LOWORD(wParam))
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
2007-04-17 10:41:07 +00:00
|
|
|
case IDC_COMBO_CURSOR_SCHEME:
|
2007-04-18 15:42:13 +00:00
|
|
|
if (HIWORD(wParam) == CBN_SELENDOK)
|
2007-04-23 09:21:13 +00:00
|
|
|
{
|
2007-04-21 14:56:23 +00:00
|
|
|
LoadNewCursorScheme(hwndDlg, FALSE);
|
2007-04-23 09:21:13 +00:00
|
|
|
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
|
|
|
}
|
2007-04-17 10:41:07 +00:00
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-17 10:41:07 +00:00
|
|
|
case IDC_LISTBOX_CURSOR:
|
2007-04-22 15:11:04 +00:00
|
|
|
switch (HIWORD(wParam))
|
2007-04-17 10:41:07 +00:00
|
|
|
{
|
2007-04-22 15:11:04 +00:00
|
|
|
case LBN_SELCHANGE:
|
|
|
|
nSel = SendMessage((HWND)lParam, LB_GETCURSEL, 0, 0);
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_IMAGE_CURRENT_CURSOR, STM_SETIMAGE, IMAGE_CURSOR,
|
|
|
|
(LPARAM)g_CursorData[nSel].hCursor);
|
|
|
|
EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_USE_DEFAULT_CURSOR),
|
|
|
|
(g_CursorData[nSel].szCursorPath[0] != 0));
|
|
|
|
break;
|
|
|
|
|
|
|
|
case LBN_DBLCLK:
|
|
|
|
if (BrowseCursor(hwndDlg))
|
|
|
|
{
|
|
|
|
/* Update cursor list and preview */
|
|
|
|
ReloadCurrentCursorScheme();
|
|
|
|
RefreshCursorList(hwndDlg, FALSE);
|
|
|
|
|
|
|
|
/* Enable the "Set Default" button */
|
|
|
|
EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_USE_DEFAULT_CURSOR), TRUE);
|
2007-04-23 09:21:13 +00:00
|
|
|
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
2007-04-22 15:11:04 +00:00
|
|
|
}
|
|
|
|
break;
|
2007-04-17 10:41:07 +00:00
|
|
|
}
|
2006-05-03 13:45:22 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case IDC_BUTTON_SAVEAS_SCHEME:
|
2007-04-23 09:21:13 +00:00
|
|
|
SaveCursorScheme(hwndDlg);
|
2006-05-03 13:45:22 +00:00
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case IDC_BUTTON_USE_DEFAULT_CURSOR:
|
2007-04-21 14:56:23 +00:00
|
|
|
nSel = SendDlgItemMessage(hwndDlg, IDC_LISTBOX_CURSOR, LB_GETCURSEL, 0, 0);
|
|
|
|
if (nSel != LB_ERR)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
2007-04-19 15:00:56 +00:00
|
|
|
/* Clean the path of the currently selected cursor */
|
2007-04-21 14:56:23 +00:00
|
|
|
memset(g_CursorData[nSel].szCursorPath, 0x0, MAX_PATH * sizeof(TCHAR));
|
2007-04-19 15:00:56 +00:00
|
|
|
|
2007-04-20 11:02:35 +00:00
|
|
|
/* Update cursor list and preview */
|
2007-04-19 15:00:56 +00:00
|
|
|
ReloadCurrentCursorScheme();
|
|
|
|
RefreshCursorList(hwndDlg, FALSE);
|
2007-04-21 14:56:23 +00:00
|
|
|
|
|
|
|
/* Disable the "Set Default" button */
|
|
|
|
EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_USE_DEFAULT_CURSOR), FALSE);
|
2007-04-23 09:21:13 +00:00
|
|
|
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case IDC_BUTTON_BROWSE_CURSOR:
|
2007-04-21 14:56:23 +00:00
|
|
|
if (BrowseCursor(hwndDlg))
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
2007-04-20 11:02:35 +00:00
|
|
|
/* Update cursor list and preview */
|
2007-04-19 15:00:56 +00:00
|
|
|
ReloadCurrentCursorScheme();
|
|
|
|
RefreshCursorList(hwndDlg, FALSE);
|
2007-04-21 14:56:23 +00:00
|
|
|
|
|
|
|
/* Enable the "Set Default" button */
|
|
|
|
EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_USE_DEFAULT_CURSOR), TRUE);
|
2007-04-23 09:21:13 +00:00
|
|
|
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case IDC_BUTTON_DELETE_SCHEME:
|
2007-04-21 14:56:23 +00:00
|
|
|
DeleteUserCursorScheme(hwndDlg);
|
2006-05-03 13:45:22 +00:00
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case IDC_CHECK_DROP_SHADOW:
|
|
|
|
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_DROP_SHADOW))
|
|
|
|
{
|
2007-04-15 10:56:51 +00:00
|
|
|
pPointerData->bDropShadow = FALSE;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
|
2007-04-15 10:56:51 +00:00
|
|
|
#if (WINVER >= 0x0500)
|
|
|
|
SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID)pPointerData->bDropShadow, SPIF_SENDCHANGE);
|
|
|
|
#endif
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-04-15 10:56:51 +00:00
|
|
|
pPointerData->bDropShadow = TRUE;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
2007-04-15 10:56:51 +00:00
|
|
|
#if (WINVER >= 0x0500)
|
|
|
|
SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID)pPointerData->bDropShadow, SPIF_SENDCHANGE);
|
|
|
|
#endif
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
2007-04-14 14:26:46 +00:00
|
|
|
}
|
2007-04-15 10:56:51 +00:00
|
|
|
break;
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-14 20:07:16 +00:00
|
|
|
static BOOL
|
|
|
|
InitializeMouse(POPTION_DATA pOptionData)
|
|
|
|
{
|
|
|
|
//FIXME
|
|
|
|
//pointer precision
|
|
|
|
// SPI_GETMOUSE?
|
|
|
|
|
|
|
|
/* Get mouse sensitivity */
|
|
|
|
if (!SystemParametersInfo(SPI_GETMOUSESPEED, 0, &pOptionData->ulMouseSensitivity, 0))
|
|
|
|
pOptionData->ulMouseSensitivity = DEFAULT_MOUSE_SENSITIVITY;
|
|
|
|
pOptionData->ulOrigMouseSensitivity = pOptionData->ulMouseSensitivity;
|
|
|
|
|
|
|
|
pOptionData->ulMouseSpeed = 1;
|
|
|
|
pOptionData->ulMouseThreshold1 = DEFAULT_MOUSE_THRESHOLD1;
|
|
|
|
pOptionData->ulMouseThreshold2 = DEFAULT_MOUSE_THRESHOLD2;
|
|
|
|
|
|
|
|
/* snap to default button */
|
|
|
|
if (SystemParametersInfo(SPI_GETSNAPTODEFBUTTON, 0, &pOptionData->ulSnapToDefaultButton, 0))
|
|
|
|
pOptionData->ulSnapToDefaultButton = 0;
|
|
|
|
|
|
|
|
/* mouse trails */
|
2007-04-15 10:56:51 +00:00
|
|
|
if (!SystemParametersInfo(SPI_GETMOUSETRAILS, 0, &pOptionData->ulMouseTrails, 0))
|
|
|
|
pOptionData->ulMouseTrails = 0;
|
2007-04-14 20:07:16 +00:00
|
|
|
|
|
|
|
/* hide pointer while typing */
|
|
|
|
if (!SystemParametersInfo(SPI_GETMOUSEVANISH, 0, &pOptionData->ulHidePointer, 0))
|
|
|
|
pOptionData->ulHidePointer = 0;
|
|
|
|
|
|
|
|
/* show pointer with Ctrl-Key */
|
|
|
|
if (!SystemParametersInfo(SPI_GETMOUSESONAR, 0, &pOptionData->ulShowPointer, 0))
|
|
|
|
pOptionData->ulShowPointer = 0;
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
static INT_PTR CALLBACK
|
|
|
|
OptionProc(IN HWND hwndDlg,
|
2007-04-14 14:26:46 +00:00
|
|
|
IN UINT uMsg,
|
|
|
|
IN WPARAM wParam,
|
|
|
|
IN LPARAM lParam)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
HWND hDlgCtrl;
|
|
|
|
LPPSHNOTIFY lppsn;
|
|
|
|
LRESULT lResult;
|
2007-04-14 20:07:16 +00:00
|
|
|
POPTION_DATA pOptionData;
|
|
|
|
|
|
|
|
pOptionData = (POPTION_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
|
2006-05-03 13:45:22 +00:00
|
|
|
|
|
|
|
switch(uMsg)
|
|
|
|
{
|
|
|
|
case WM_INITDIALOG:
|
2007-04-14 20:07:16 +00:00
|
|
|
pOptionData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(OPTION_DATA));
|
|
|
|
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pOptionData);
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-14 20:07:16 +00:00
|
|
|
InitializeMouse(pOptionData);
|
2006-05-03 13:45:22 +00:00
|
|
|
|
2007-04-14 20:07:16 +00:00
|
|
|
/* set mouse sensitivity */
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SLIDER_MOUSE_SENSITIVITY);
|
|
|
|
SendMessage(hDlgCtrl, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(0, 19));
|
|
|
|
SendMessage(hDlgCtrl, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)pOptionData->ulMouseSensitivity - 1);
|
2006-05-03 13:45:22 +00:00
|
|
|
|
2007-04-14 20:07:16 +00:00
|
|
|
if (pOptionData->ulMouseSpeed)
|
|
|
|
{
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_POINTER_PRECISION);
|
|
|
|
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
|
|
|
}
|
2006-05-03 13:45:22 +00:00
|
|
|
|
2007-04-14 20:07:16 +00:00
|
|
|
if (pOptionData->ulSnapToDefaultButton)
|
|
|
|
{
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_SNAP_TO);
|
|
|
|
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-14 20:07:16 +00:00
|
|
|
/* set mouse trail */
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SLIDER_POINTER_TRAIL);
|
|
|
|
SendMessage(hDlgCtrl, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(0, 5));
|
2007-04-15 10:56:51 +00:00
|
|
|
if (pOptionData->ulMouseTrails < 2)
|
2007-04-14 20:07:16 +00:00
|
|
|
EnableWindow(hDlgCtrl, FALSE);
|
|
|
|
else
|
2007-04-15 10:56:51 +00:00
|
|
|
SendMessage(hDlgCtrl, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)pOptionData->ulMouseTrails - 2);
|
2007-04-14 20:07:16 +00:00
|
|
|
|
|
|
|
if (pOptionData->ulShowPointer)
|
|
|
|
{
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_SHOW_POINTER);
|
|
|
|
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (pOptionData->ulHidePointer)
|
|
|
|
{
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_HIDE_POINTER);
|
|
|
|
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-14 20:07:16 +00:00
|
|
|
case WM_DESTROY:
|
|
|
|
HeapFree(GetProcessHeap(), 0, pOptionData);
|
|
|
|
break;
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case WM_COMMAND:
|
|
|
|
switch(LOWORD(wParam))
|
|
|
|
{
|
|
|
|
case IDC_CHECK_POINTER_PRECISION:
|
|
|
|
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_POINTER_PRECISION))
|
|
|
|
{
|
2007-04-14 20:07:16 +00:00
|
|
|
pOptionData->ulMouseSpeed = 0;
|
|
|
|
pOptionData->ulMouseThreshold1 = 0;
|
|
|
|
pOptionData->ulMouseThreshold2 = 0;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-04-14 20:07:16 +00:00
|
|
|
pOptionData->ulMouseSpeed = 1;
|
|
|
|
pOptionData->ulMouseThreshold1 = 6;
|
|
|
|
pOptionData->ulMouseThreshold2 = 10;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
|
|
|
}
|
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case IDC_CHECK_SNAP_TO:
|
|
|
|
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_SNAP_TO))
|
|
|
|
{
|
2007-04-14 20:07:16 +00:00
|
|
|
pOptionData->ulSnapToDefaultButton = 0;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-04-14 20:07:16 +00:00
|
|
|
pOptionData->ulSnapToDefaultButton = 1;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
|
|
|
}
|
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case IDC_CHECK_POINTER_TRAIL:
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SLIDER_POINTER_TRAIL);
|
|
|
|
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_POINTER_TRAIL))
|
|
|
|
{
|
2007-04-15 10:56:51 +00:00
|
|
|
pOptionData->ulMouseTrails = 0;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
|
|
|
|
EnableWindow(hDlgCtrl, FALSE);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
|
|
|
EnableWindow(hDlgCtrl, TRUE);
|
2007-04-15 10:56:51 +00:00
|
|
|
pOptionData->ulMouseTrails = (ULONG)SendMessage(hDlgCtrl, TBM_GETPOS, 0, 0) + 2;
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
break;
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case IDC_CHECK_SHOW_POINTER:
|
|
|
|
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_SHOW_POINTER))
|
|
|
|
{
|
2007-04-14 20:07:16 +00:00
|
|
|
pOptionData->ulShowPointer = 0;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-04-14 20:07:16 +00:00
|
|
|
pOptionData->ulShowPointer = 1;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
|
|
|
}
|
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case IDC_CHECK_HIDE_POINTER:
|
|
|
|
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_HIDE_POINTER))
|
|
|
|
{
|
2007-04-14 20:07:16 +00:00
|
|
|
pOptionData->ulHidePointer = 0;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-04-14 20:07:16 +00:00
|
|
|
pOptionData->ulHidePointer = 1;
|
2006-05-03 13:45:22 +00:00
|
|
|
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case WM_NOTIFY:
|
2007-04-14 20:07:16 +00:00
|
|
|
lppsn = (LPPSHNOTIFY)lParam;
|
2006-05-03 13:45:22 +00:00
|
|
|
if (lppsn->hdr.code == PSN_APPLY)
|
|
|
|
{
|
|
|
|
/* set snap to default button */
|
2007-04-14 20:07:16 +00:00
|
|
|
SystemParametersInfo(SPI_SETSNAPTODEFBUTTON, pOptionData->ulSnapToDefaultButton, 0, SPIF_SENDCHANGE);
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-14 20:07:16 +00:00
|
|
|
#if 0
|
2006-05-03 13:45:22 +00:00
|
|
|
/* set mouse trails */
|
|
|
|
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_POINTER_TRAIL))
|
|
|
|
{
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SLIDER_POINTER_TRAIL);
|
2007-04-14 20:07:16 +00:00
|
|
|
lResult = SendMessage(hDlgCtrl, TBM_GETPOS, 0, 0) + 2;
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
else
|
|
|
|
{
|
2006-05-03 13:45:22 +00:00
|
|
|
lResult = 0;
|
2007-04-14 14:26:46 +00:00
|
|
|
}
|
2006-05-03 13:45:22 +00:00
|
|
|
|
2007-04-14 20:07:16 +00:00
|
|
|
SystemParametersInfo(SPI_SETMOUSETRAILS, (UINT) lResult, 0, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
|
|
|
|
#endif
|
2006-05-03 13:45:22 +00:00
|
|
|
|
|
|
|
//FIXME
|
|
|
|
//pointer precision
|
|
|
|
//SPI_SETMOUSE?
|
|
|
|
|
|
|
|
/* calc pos and set mouse sensitivity */
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SLIDER_MOUSE_SENSITIVITY);
|
|
|
|
lResult = SendMessage(hDlgCtrl, TBM_GETPOS, 0, 0) + 1;
|
2007-04-14 20:07:16 +00:00
|
|
|
SystemParametersInfo(SPI_SETMOUSESPEED, 0, (PVOID)pOptionData->ulMouseSensitivity, SPIF_SENDCHANGE);
|
2006-05-03 13:45:22 +00:00
|
|
|
|
|
|
|
/* hide pointer while typing */
|
2007-04-14 20:07:16 +00:00
|
|
|
SystemParametersInfo(SPI_SETMOUSEVANISH, 0, (PVOID)pOptionData->ulHidePointer, SPIF_SENDCHANGE);
|
2006-05-03 13:45:22 +00:00
|
|
|
|
|
|
|
/* show pointer with Ctrl-Key */
|
2007-04-14 20:07:16 +00:00
|
|
|
SystemParametersInfo(SPI_SETMOUSESONAR, 0, (PVOID)pOptionData->ulShowPointer, SPIF_SENDCHANGE);
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
SetWindowLong(hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR);
|
|
|
|
return TRUE;
|
|
|
|
}
|
2007-04-14 20:07:16 +00:00
|
|
|
else if (lppsn->hdr.code == PSN_RESET)
|
|
|
|
{
|
|
|
|
/* Set the original mouse speed */
|
|
|
|
SystemParametersInfo(SPI_SETMOUSESPEED, 0, (PVOID)pOptionData->ulOrigMouseSensitivity, SPIF_SENDCHANGE);
|
|
|
|
}
|
2006-05-06 11:10:27 +00:00
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-06 11:10:27 +00:00
|
|
|
case WM_HSCROLL:
|
2007-04-14 20:07:16 +00:00
|
|
|
if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_SLIDER_MOUSE_SENSITIVITY))
|
|
|
|
{
|
|
|
|
switch (LOWORD(wParam))
|
|
|
|
{
|
|
|
|
case TB_LINEUP:
|
|
|
|
case TB_LINEDOWN:
|
|
|
|
case TB_PAGEUP:
|
|
|
|
case TB_PAGEDOWN:
|
|
|
|
case TB_TOP:
|
|
|
|
case TB_BOTTOM:
|
|
|
|
case TB_ENDTRACK:
|
|
|
|
pOptionData->ulMouseSensitivity = (ULONG)SendDlgItemMessage(hwndDlg, IDC_SLIDER_MOUSE_SENSITIVITY, TBM_GETPOS, 0, 0) + 1;
|
|
|
|
SystemParametersInfo(SPI_SETMOUSESPEED, 0, (PVOID)pOptionData->ulMouseSensitivity, SPIF_SENDCHANGE);
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
|
|
|
break;
|
|
|
|
#if 0
|
|
|
|
case TB_THUMBTRACK:
|
|
|
|
pOptionData->ulMouseSensitivity = (ULONG)HIWORD(wParam) + 1;
|
|
|
|
SystemParametersInfo(SPI_SETMOUSESPEED, 0, (PVOID)pOptionData->ulMouseSensitivity, SPIF_SENDCHANGE);
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
|
|
|
break;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_SLIDER_POINTER_TRAIL))
|
|
|
|
{
|
|
|
|
switch (LOWORD(wParam))
|
|
|
|
{
|
|
|
|
case TB_LINEUP:
|
|
|
|
case TB_LINEDOWN:
|
|
|
|
case TB_PAGEUP:
|
|
|
|
case TB_PAGEDOWN:
|
|
|
|
case TB_TOP:
|
|
|
|
case TB_BOTTOM:
|
|
|
|
case TB_ENDTRACK:
|
2007-04-15 10:56:51 +00:00
|
|
|
pOptionData->ulMouseTrails = (ULONG)SendDlgItemMessage(hwndDlg, IDC_SLIDER_POINTER_TRAIL, TBM_GETPOS, 0, 0) + 2;
|
|
|
|
SystemParametersInfo(SPI_SETMOUSETRAILS, pOptionData->ulMouseTrails, 0, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
|
2007-04-14 20:07:16 +00:00
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TB_THUMBTRACK:
|
2007-04-15 10:56:51 +00:00
|
|
|
pOptionData->ulMouseTrails = (ULONG)HIWORD(wParam) + 2;
|
|
|
|
SystemParametersInfo(SPI_SETMOUSETRAILS, pOptionData->ulMouseTrails, 0, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
|
2007-04-14 20:07:16 +00:00
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2006-05-06 11:10:27 +00:00
|
|
|
break;
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
|
|
|
|
static VOID
|
2007-04-14 16:12:26 +00:00
|
|
|
ShowDialogWheelControls(HWND hwndDlg, UINT uWheelScrollLines, BOOL bInit)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
HWND hDlgCtrl;
|
|
|
|
|
2007-04-14 16:12:26 +00:00
|
|
|
if (uWheelScrollLines != WHEEL_PAGESCROLL)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_WHEEL_SCROLL_LINES);
|
|
|
|
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_WHEEL_SCROLL_LINES);
|
|
|
|
EnableWindow(hDlgCtrl, TRUE);
|
|
|
|
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_UPDOWN_WHEEL_SCROLL_LINES);
|
|
|
|
EnableWindow(hDlgCtrl, TRUE);
|
|
|
|
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_WHEEL_SCROLL_PAGE);
|
|
|
|
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_WHEEL_SCROLL_LINES);
|
|
|
|
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
|
|
|
|
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_WHEEL_SCROLL_LINES);
|
|
|
|
EnableWindow(hDlgCtrl, FALSE);
|
|
|
|
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_UPDOWN_WHEEL_SCROLL_LINES);
|
2007-04-14 16:12:26 +00:00
|
|
|
EnableWindow(hDlgCtrl, FALSE);
|
2006-05-03 13:45:22 +00:00
|
|
|
|
|
|
|
hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_WHEEL_SCROLL_PAGE);
|
|
|
|
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
|
2007-04-14 16:12:26 +00:00
|
|
|
|
|
|
|
/* Set the default scroll lines value */
|
|
|
|
if (bInit == TRUE)
|
|
|
|
SetDlgItemInt(hwndDlg, IDC_EDIT_WHEEL_SCROLL_LINES, DEFAULT_WHEEL_SCROLL_LINES, FALSE);
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
static INT_PTR CALLBACK
|
|
|
|
WheelProc(IN HWND hwndDlg,
|
2007-04-14 14:26:46 +00:00
|
|
|
IN UINT uMsg,
|
|
|
|
IN WPARAM wParam,
|
|
|
|
IN LPARAM lParam)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
LPPSHNOTIFY lppsn;
|
2007-04-14 16:12:26 +00:00
|
|
|
PWHEEL_DATA pWheelData;
|
|
|
|
|
|
|
|
pWheelData = (PWHEEL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
|
2006-05-03 13:45:22 +00:00
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
switch (uMsg)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
case WM_INITDIALOG:
|
2007-04-14 16:12:26 +00:00
|
|
|
pWheelData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WHEEL_DATA));
|
|
|
|
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pWheelData);
|
|
|
|
|
|
|
|
/* Get wheel scroll lines */
|
|
|
|
if (!SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &pWheelData->uWheelScrollLines, 0))
|
|
|
|
{
|
|
|
|
pWheelData->uWheelScrollLines = DEFAULT_WHEEL_SCROLL_LINES;
|
|
|
|
}
|
|
|
|
|
|
|
|
ShowDialogWheelControls(hwndDlg, pWheelData->uWheelScrollLines, TRUE);
|
|
|
|
SendDlgItemMessage(hwndDlg, IDC_UPDOWN_WHEEL_SCROLL_LINES, UDM_SETRANGE, 0, MAKELONG((short)100, (short)0));
|
|
|
|
if (pWheelData->uWheelScrollLines != WHEEL_PAGESCROLL)
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
2007-04-14 16:12:26 +00:00
|
|
|
SetDlgItemInt(hwndDlg, IDC_EDIT_WHEEL_SCROLL_LINES, pWheelData->uWheelScrollLines, FALSE);
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
return TRUE;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2007-04-14 16:12:26 +00:00
|
|
|
case WM_DESTROY:
|
|
|
|
HeapFree(GetProcessHeap(), 0, pWheelData);
|
|
|
|
break;
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case WM_COMMAND:
|
2007-04-14 14:26:46 +00:00
|
|
|
switch (LOWORD(wParam))
|
2006-05-03 13:45:22 +00:00
|
|
|
{
|
|
|
|
case IDC_RADIO_WHEEL_SCROLL_LINES:
|
2007-04-14 16:12:26 +00:00
|
|
|
pWheelData->uWheelScrollLines = GetDlgItemInt(hwndDlg, IDC_EDIT_WHEEL_SCROLL_LINES, NULL, FALSE);
|
|
|
|
ShowDialogWheelControls(hwndDlg, pWheelData->uWheelScrollLines, FALSE);
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
2006-05-03 13:45:22 +00:00
|
|
|
break;
|
2007-04-14 16:12:26 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case IDC_RADIO_WHEEL_SCROLL_PAGE:
|
2007-04-14 16:12:26 +00:00
|
|
|
pWheelData->uWheelScrollLines = WHEEL_PAGESCROLL;
|
|
|
|
ShowDialogWheelControls(hwndDlg, pWheelData->uWheelScrollLines, FALSE);
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case IDC_EDIT_WHEEL_SCROLL_LINES:
|
|
|
|
if (pWheelData && HIWORD(wParam) == EN_CHANGE)
|
|
|
|
{
|
|
|
|
pWheelData->uWheelScrollLines = GetDlgItemInt(hwndDlg, IDC_EDIT_WHEEL_SCROLL_LINES, NULL, FALSE);
|
|
|
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
|
|
|
}
|
2006-05-03 13:45:22 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
case WM_NOTIFY:
|
2007-04-14 16:12:26 +00:00
|
|
|
lppsn = (LPPSHNOTIFY)lParam;
|
2006-05-03 13:45:22 +00:00
|
|
|
if (lppsn->hdr.code == PSN_APPLY)
|
|
|
|
{
|
2007-04-14 16:12:26 +00:00
|
|
|
SystemParametersInfo(SPI_SETWHEELSCROLLLINES, pWheelData->uWheelScrollLines,
|
|
|
|
0, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
|
2006-05-03 13:45:22 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
2007-04-14 14:26:46 +00:00
|
|
|
break;
|
2006-05-03 13:45:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2007-04-14 14:26:46 +00:00
|
|
|
|
2004-10-30 12:36:14 +00:00
|
|
|
LONG APIENTRY
|
|
|
|
MouseApplet(HWND hwnd, UINT uMsg, LONG lParam1, LONG lParam2)
|
|
|
|
{
|
2006-05-03 13:45:22 +00:00
|
|
|
PROPSHEETPAGE psp[5];
|
|
|
|
PROPSHEETHEADER psh;
|
|
|
|
TCHAR Caption[256];
|
|
|
|
|
2006-07-09 21:10:40 +00:00
|
|
|
UNREFERENCED_PARAMETER(lParam1);
|
|
|
|
UNREFERENCED_PARAMETER(lParam2);
|
|
|
|
UNREFERENCED_PARAMETER(uMsg);
|
|
|
|
UNREFERENCED_PARAMETER(hwnd);
|
|
|
|
|
2006-05-03 13:45:22 +00:00
|
|
|
LoadString(hApplet, IDS_CPLNAME_1, Caption, sizeof(Caption) / sizeof(TCHAR));
|
|
|
|
|
|
|
|
ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
|
|
|
|
psh.dwSize = sizeof(PROPSHEETHEADER);
|
|
|
|
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE;
|
|
|
|
psh.hwndParent = NULL;
|
|
|
|
psh.hInstance = hApplet;
|
|
|
|
psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDC_CPLICON_1));
|
|
|
|
psh.pszCaption = Caption;
|
|
|
|
psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
|
|
|
|
psh.nStartPage = 0;
|
|
|
|
psh.ppsp = psp;
|
|
|
|
|
|
|
|
InitPropSheetPage(&psp[0], IDD_PAGE_BUTTON, ButtonProc);
|
|
|
|
InitPropSheetPage(&psp[1], IDD_PAGE_POINTER, PointerProc);
|
|
|
|
InitPropSheetPage(&psp[2], IDD_PAGE_OPTION, OptionProc);
|
|
|
|
InitPropSheetPage(&psp[3], IDD_PAGE_WHEEL, WheelProc);
|
|
|
|
InitPropSheetPage(&psp[4], IDD_HARDWARE, MouseHardwareProc);
|
|
|
|
return (LONG)(PropertySheet(&psh) != -1);
|
2004-10-30 12:36:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* EOF */
|