📄 mouse.c
字号:
dwDataSize = 256 * sizeof(TCHAR);
lError = RegQueryValueEx(hCursorKey,
NULL,
NULL,
NULL,
(LPBYTE)szSchemeName,
&dwDataSize);
for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++)
{
dwDataSize = MAX_PATH * sizeof(TCHAR);
lError = RegQueryValueEx(hCursorKey,
g_CursorData[i].lpValueName,
NULL,
&dwType,
(LPBYTE)szCursorPath,
&dwDataSize);
if (lError == ERROR_SUCCESS)
{
if (dwType == REG_EXPAND_SZ)
{
ExpandEnvironmentStrings(szCursorPath, g_CursorData[i].szCursorPath, MAX_PATH);
}
else
{
_tcscpy(g_CursorData[i].szCursorPath, szCursorPath);
}
}
}
}
RegCloseKey(hCursorKey);
ReloadCurrentCursorScheme();
RefreshCursorList(hwndDlg, TRUE);
/* Build the full scheme name */
if (dwSchemeSource == 0)
{
LoadString(hApplet, IDS_NONE, szSchemeName, MAX_PATH);
}
else if (dwSchemeSource == 2)
{
LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH);
_tcscat(szSchemeName, _T(" "));
_tcscat(szSchemeName, szSystemScheme);
}
/* Search and select the curent scheme name from the scheme list */
nSel = SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_FINDSTRINGEXACT, -1, (LPARAM)szSchemeName);
if (nSel != CB_ERR)
SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_SETCURSEL, (WPARAM)nSel, (LPARAM)0);
/* Enable /disable delete button */
EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_DELETE_SCHEME), (dwSchemeSource == 1));
}
static BOOL
ApplyCursorScheme(HWND hwndDlg)
{
TCHAR szSchemeName[MAX_PATH];
TCHAR szSystemScheme[MAX_PATH];
TCHAR szTempPath[MAX_PATH];
LPTSTR lpSchemeData;
DWORD dwNameLength;
DWORD dwSchemeSource;
UINT index, i;
HKEY hCursorKey;
INT nSel;
nSel = SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETCURSEL, 0, 0);
if (nSel == CB_ERR)
return FALSE;
lpSchemeData = (LPTSTR)SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETITEMDATA, nSel, 0);
if (lpSchemeData == NULL)
{
/* "None" cursor scheme */
dwSchemeSource = 0;
szSchemeName[0] = 0;
dwNameLength = 0;
}
else
{
SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETLBTEXT, nSel, (LPARAM)szSchemeName);
LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH);
if (_tcsstr(szSchemeName, szSystemScheme))
{
/* System scheme */
dwSchemeSource = 2;
szSchemeName[_tcslen(szSchemeName) - _tcslen(szSystemScheme) - 1] = 0;
}
else
{
/* User scheme */
dwSchemeSource = 1;
}
dwNameLength = (_tcslen(szSchemeName) + 1) * sizeof(TCHAR);
}
if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Control Panel\\Cursors"), 0,
KEY_READ | KEY_SET_VALUE, &hCursorKey) != ERROR_SUCCESS)
return FALSE;
RegSetValueEx(hCursorKey, NULL, 0, REG_SZ,
(LPBYTE)szSchemeName, dwNameLength);
RegSetValueEx(hCursorKey, _T("Scheme Source"), 0, REG_DWORD,
(LPBYTE)&dwSchemeSource, sizeof(DWORD));
for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++)
{
CompressPath(szTempPath, g_CursorData[i].szCursorPath);
RegSetValueEx(hCursorKey, g_CursorData[i].lpValueName, 0,
REG_EXPAND_SZ, (LPBYTE)szTempPath,
(_tcslen(szTempPath) + 1) * sizeof(TCHAR));
}
RegCloseKey(hCursorKey);
/* Force the system to reload its cursors */
SystemParametersInfo(SPI_SETCURSORS, 0, NULL, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
return TRUE;
}
static INT_PTR CALLBACK
PointerProc(IN HWND hwndDlg,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam)
{
PPOINTER_DATA pPointerData;
LPPSHNOTIFY lppsn;
INT nSel;
pPointerData = (PPOINTER_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
switch (uMsg)
{
case WM_INITDIALOG:
pPointerData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(POINTER_DATA));
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pPointerData);
pPointerData->cxCursor = GetSystemMetrics(SM_CXCURSOR);
pPointerData->cyCursor = GetSystemMetrics(SM_CYCURSOR);
EnumerateCursorSchemes(hwndDlg);
LoadInitialCursorScheme(hwndDlg);
/* Get drop shadow setting */
if (!SystemParametersInfo(SPI_GETDROPSHADOW, 0, &pPointerData->bDropShadow, 0))
pPointerData->bDropShadow = FALSE;
pPointerData->bOrigDropShadow = pPointerData->bDropShadow;
if (pPointerData->bDropShadow)
{
SendDlgItemMessage(hwndDlg, IDC_CHECK_DROP_SHADOW, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
if ((INT)wParam == IDC_LISTBOX_CURSOR)
return TRUE;
else
return FALSE;
case WM_MEASUREITEM:
((LPMEASUREITEMSTRUCT)lParam)->itemHeight = GetSystemMetrics(SM_CYCURSOR) + 4;
break;
case WM_DRAWITEM:
if (wParam == IDC_LISTBOX_CURSOR)
OnDrawItem((UINT)wParam, (LPDRAWITEMSTRUCT)lParam, pPointerData);
return TRUE;
case WM_DESTROY:
HeapFree(GetProcessHeap(), 0, pPointerData);
break;
case WM_NOTIFY:
lppsn = (LPPSHNOTIFY) lParam;
if (lppsn->hdr.code == PSN_APPLY)
{
ApplyCursorScheme(hwndDlg);
//#if (WINVER >= 0x0500)
if (pPointerData->bOrigDropShadow != pPointerData->bDropShadow)
{
SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID)pPointerData->bDropShadow, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
pPointerData->bOrigDropShadow = pPointerData->bDropShadow;
}
//#endif
return TRUE;
}
else if (lppsn->hdr.code == PSN_RESET)
{
//#if (WINVER >= 0x0500)
SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID)pPointerData->bOrigDropShadow, 0);
//#endif
}
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_COMBO_CURSOR_SCHEME:
if (HIWORD(wParam) == CBN_SELENDOK)
{
LoadNewCursorScheme(hwndDlg);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
break;
case IDC_LISTBOX_CURSOR:
switch (HIWORD(wParam))
{
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);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
break;
}
break;
case IDC_BUTTON_SAVEAS_SCHEME:
SaveCursorScheme(hwndDlg);
break;
case IDC_BUTTON_USE_DEFAULT_CURSOR:
nSel = SendDlgItemMessage(hwndDlg, IDC_LISTBOX_CURSOR, LB_GETCURSEL, 0, 0);
if (nSel != LB_ERR)
{
/* Clean the path of the currently selected cursor */
memset(g_CursorData[nSel].szCursorPath, 0x0, MAX_PATH * sizeof(TCHAR));
/* Update cursor list and preview */
ReloadCurrentCursorScheme();
RefreshCursorList(hwndDlg, FALSE);
/* Disable the "Set Default" button */
EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_USE_DEFAULT_CURSOR), FALSE);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
break;
case IDC_BUTTON_BROWSE_CURSOR:
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);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
break;
case IDC_BUTTON_DELETE_SCHEME:
DeleteUserCursorScheme(hwndDlg);
break;
case IDC_CHECK_DROP_SHADOW:
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_DROP_SHADOW))
{
pPointerData->bDropShadow = FALSE;
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
//#if (WINVER >= 0x0500)
// SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID)pPointerData->bDropShadow, 0);
//#endif
// PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
else
{
pPointerData->bDropShadow = TRUE;
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
//#if (WINVER >= 0x0500)
SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID)pPointerData->bDropShadow, 0);
//#endif
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
break;
}
return FALSE;
}
static INT_PTR CALLBACK
OptionProc(IN HWND hwndDlg,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam)
{
POPTION_DATA pOptionData;
HWND hDlgCtrl;
LPPSHNOTIFY lppsn;
pOptionData = (POPTION_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
switch(uMsg)
{
case WM_INITDIALOG:
pOptionData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(OPTION_DATA));
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pOptionData);
/* Get mouse sensitivity */
if (!SystemParametersInfo(SPI_GETMOUSESPEED, 0, &pOptionData->ulMouseSpeed, 0))
pOptionData->ulMouseSpeed = DEFAULT_MOUSE_SPEED;
pOptionData->ulOrigMouseSpeed = pOptionData->ulMouseSpeed;
if (!SystemParametersInfo(SPI_GETMOUSE, 0, &pOptionData->MouseAccel, 0))
{
pOptionData->MouseAccel.nAcceleration = DEFAULT_MOUSE_ACCELERATION;
pOptionData->MouseAccel.nThreshold1 = DEFAULT_MOUSE_THRESHOLD1;
pOptionData->MouseAccel.nThreshold2 = DEFAULT_MOUSE_THRESHOLD2;
}
pOptionData->OrigMouseAccel.nAcceleration = pOptionData->MouseAccel.nAcceleration;
pOptionData->OrigMouseAccel.nThreshold1 = pOptionData->MouseAccel.nThreshold1;
pOptionData->OrigMouseAccel.nThreshold2 = pOptionData->MouseAccel.nThreshold2;
/* snap to default button */
if (SystemParametersInfo(SPI_GETSNAPTODEFBUTTON, 0, &pOptionData->bSnapToDefaultButton, 0))
pOptionData->bSnapToDefaultButton = FALSE;
pOptionData->bOrigSnapToDefaultButton = pOptionData->bSnapToDefaultButton;
/* mouse trails */
if (!SystemParametersInfo(SPI_GETMOUSETRAILS, 0, &pOptionData->uMouseTrails, 0))
pOptionData->uMouseTrails = 0;
pOptionData->uOrigMouseTrails = pOptionData->uMouseTrails;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -