📄 mouse.c
字号:
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));
}
break;
}
break;
case WM_NOTIFY:
lppsn = (LPPSHNOTIFY) lParam;
if (lppsn->hdr.code == PSN_APPLY)
{
if (pButtonData->g_OrigSwapMouseButtons != pButtonData->g_SwapMouseButtons)
{
pButtonData->g_OrigSwapMouseButtons = pButtonData->g_SwapMouseButtons;
SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, pButtonData->g_OrigSwapMouseButtons, NULL, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
}
#if (WINVER >= 0x0500)
SystemParametersInfo(SPI_SETMOUSECLICKLOCK, pButtonData->g_ClickLockEnabled, NULL, SPIF_SENDCHANGE);
if (pButtonData->g_ClickLockEnabled)
SystemParametersInfo(SPI_SETMOUSECLICKLOCKTIME, pButtonData->g_ClickLockTime, NULL, SPIF_SENDCHANGE);
#endif
}
else if (lppsn->hdr.code == PSN_RESET)
{
/* Reset swap mouse button setting */
SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, pButtonData->g_OrigSwapMouseButtons, NULL, 0);
/* Reset double click speed setting */
// SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_OrigDoubleClickSpeed, NULL, 0);
SetDoubleClickTime(pButtonData->g_OrigDoubleClickSpeed);
}
return TRUE;
case WM_HSCROLL:
if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_SLIDER_DOUBLE_CLICK_SPEED))
{
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, 0);
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, 0);
SetDoubleClickTime(pButtonData->g_DoubleClickSpeed);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
}
break;
}
return FALSE;
}
static VOID
CompressPath(LPTSTR lpShortPath, LPTSTR lpPath)
{
TCHAR szUserProfile[MAX_PATH];
TCHAR szSystemRoot[MAX_PATH];
TCHAR szProgramFiles[MAX_PATH];
DWORD dwUserProfile;
DWORD dwSystemRoot;
DWORD dwProgramFiles;
dwUserProfile = GetEnvironmentVariable(_T("USERPROFILE"), szUserProfile, MAX_PATH);
dwSystemRoot = GetEnvironmentVariable(_T("SystemRoot"), szSystemRoot, MAX_PATH);
dwProgramFiles = GetEnvironmentVariable(_T("ProgramFiles"), szProgramFiles, MAX_PATH);
if (dwUserProfile > 0 && _tcsncmp(lpPath, szUserProfile, dwUserProfile) == 0)
{
_tcscpy(lpShortPath, _T("%USERPROFILE%"));
_tcscat(lpShortPath, &lpPath[dwUserProfile]);
}
else if (dwSystemRoot > 0 && _tcsncmp(lpPath, szSystemRoot, dwSystemRoot) == 0)
{
_tcscpy(lpShortPath, _T("%SystemRoot%"));
_tcscat(lpShortPath, &lpPath[dwSystemRoot]);
}
else if (dwProgramFiles > 0 && _tcsncmp(lpPath, szProgramFiles, dwProgramFiles) == 0)
{
_tcscpy(lpShortPath, _T("%ProgramFiles%"));
_tcscat(lpShortPath, &lpPath[dwProgramFiles]);
}
else
{
_tcscpy(lpShortPath, lpPath);
}
}
static BOOL
EnumerateCursorSchemes(HWND hwndDlg)
{
HKEY hCursorKey;
DWORD dwIndex;
TCHAR szValueName[MAX_PATH];
DWORD dwValueName;
TCHAR szSystemScheme[MAX_PATH];
TCHAR szValueData[2000];
TCHAR szTempData[2000];
DWORD dwValueData;
LONG lError;
HWND hDlgCtrl;
LRESULT lResult;
hDlgCtrl = GetDlgItem(hwndDlg, IDC_COMBO_CURSOR_SCHEME);
SendMessage(hDlgCtrl, CB_RESETCONTENT, 0, 0);
/* Read the users cursor schemes */
lError = RegOpenKeyEx(HKEY_CURRENT_USER, _T("Control Panel\\Cursors\\Schemes"),
0, KEY_READ | KEY_QUERY_VALUE , &hCursorKey);
if (lError == ERROR_SUCCESS)
{
for (dwIndex = 0;; dwIndex++)
{
dwValueName = sizeof(szValueName) / sizeof(TCHAR);
dwValueData = sizeof(szValueData) / sizeof(TCHAR);
lError = RegEnumValue(hCursorKey, dwIndex, szValueName, &dwValueName,
NULL, NULL, (LPBYTE)szValueData, &dwValueData);
if (lError == ERROR_NO_MORE_ITEMS)
break;
ExpandEnvironmentStrings(szValueData, szTempData, 2000);
if (_tcslen(szTempData) > 0)
{
LPTSTR lpCopy, lpStart;
/* Remove quotation marks */
if (szTempData[0] == _T('"'))
{
lpStart = szValueData + 1;
szTempData[_tcslen(szTempData) - 1] = 0;
}
else
{
lpStart = szTempData;
}
lpCopy = _tcsdup(lpStart);
lResult = SendMessage(hDlgCtrl, CB_ADDSTRING, (WPARAM)0, (LPARAM)szValueName);
SendMessage(hDlgCtrl, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)lpCopy);
}
}
RegCloseKey(hCursorKey);
}
/* Read the system cursor schemes */
lError = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Cursors\\Schemes"),
0, KEY_READ | KEY_QUERY_VALUE , &hCursorKey);
if (lError == ERROR_SUCCESS)
{
LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH);
for (dwIndex = 0;; dwIndex++)
{
dwValueName = sizeof(szValueName) / sizeof(TCHAR);
dwValueData = sizeof(szValueData) / sizeof(TCHAR);
lError = RegEnumValue(hCursorKey, dwIndex, szValueName, &dwValueName,
NULL, NULL, (LPBYTE)szValueData, &dwValueData);
if (lError == ERROR_NO_MORE_ITEMS)
break;
if (_tcslen(szValueData) > 0)
{
LPTSTR lpCopy, lpStart;
/* Remove quotation marks */
if (szValueData[0] == _T('"'))
{
lpStart = szValueData + 1;
szValueData[_tcslen(szValueData) - 1] = 0;
}
else
{
lpStart = szValueData;
}
lpCopy = _tcsdup(lpStart);
_tcscat(szValueName, TEXT(" "));
_tcscat(szValueName, szSystemScheme);
lResult = SendMessage(hDlgCtrl, CB_ADDSTRING, (WPARAM)0, (LPARAM)szValueName);
SendMessage(hDlgCtrl, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)lpCopy);
}
}
RegCloseKey(hCursorKey);
}
/* Add the "(none)" entry */
LoadString(hApplet, IDS_NONE, szSystemScheme, MAX_PATH);
lResult = SendMessage(hDlgCtrl, CB_ADDSTRING, (WPARAM)0, (LPARAM)szSystemScheme);
SendMessage(hDlgCtrl, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)NULL);
return TRUE;
}
static VOID
RefreshCursorList(HWND hwndDlg, BOOL bInit)
{
INT index;
INT i;
INT nSel;
nSel = bInit ? 0 : SendDlgItemMessage(hwndDlg, IDC_LISTBOX_CURSOR, LB_GETCURSEL, 0, 0);
if (bInit)
{
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);
}
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));
}
static BOOL
DeleteUserCursorScheme(HWND hwndDlg)
{
TCHAR szSchemeName[MAX_PATH];
TCHAR szTitle[128];
TCHAR szRawText[256];
TCHAR szText[256];
HWND hDlgCtrl;
HKEY hCuKey;
HKEY hCuCursorKey;
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);
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;
if (RegOpenCurrentUser(KEY_READ | KEY_SET_VALUE, &hCuKey) != ERROR_SUCCESS)
return FALSE;
if (RegOpenKeyEx(hCuKey, _T("Control Panel\\Cursors\\Schemes"), 0, KEY_READ | KEY_SET_VALUE, &hCuCursorKey) != ERROR_SUCCESS)
{
RegCloseKey(hCuKey);
return FALSE;
}
lResult = RegDeleteValue(hCuCursorKey, szSchemeName);
RegCloseKey(hCuCursorKey);
RegCloseKey(hCuKey);
if (lResult == ERROR_SUCCESS)
{
SendMessage(hDlgCtrl, CB_DELETESTRING, nSel, 0);
SendMessage(hDlgCtrl, CB_SETCURSEL, (WPARAM)0, (LPARAM)0);
}
return (lResult == ERROR_SUCCESS);
}
static INT_PTR CALLBACK
SaveSchemeProc(IN HWND hwndDlg,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam)
{
LPTSTR pSchemeName;
switch (uMsg)
{
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;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
pSchemeName = (LPTSTR)GetWindowLongPtr(hwndDlg, DWLP_USER);
SendDlgItemMessage(hwndDlg, IDC_EDIT_SCHEME_NAME, WM_GETTEXT,
(WPARAM)MAX_PATH, (LPARAM)pSchemeName);
EndDialog(hwndDlg, TRUE);
}
else if (LOWORD(wParam) == IDCANCEL)
{
EndDialog(hwndDlg, FALSE);
}
break;
}
return FALSE;
}
static BOOL
SaveCursorScheme(HWND hwndDlg)
{
TCHAR szSystemScheme[MAX_PATH];
TCHAR szSchemeName[MAX_PATH];
TCHAR szNewSchemeName[MAX_PATH];
TCHAR szTempPath[MAX_PATH];
TCHAR szTitle[128];
TCHAR szText[256];
INT nSel;
INT index, i, nLength;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -