📄 mouse.c
字号:
/* hide pointer while typing */
if (!SystemParametersInfo(SPI_GETMOUSEVANISH, 0, &pOptionData->bMouseVanish, 0))
pOptionData->bMouseVanish = FALSE;
pOptionData->bOrigMouseVanish = pOptionData->bMouseVanish;
/* show pointer with Ctrl-Key */
if (!SystemParametersInfo(SPI_GETMOUSESONAR, 0, &pOptionData->bMouseSonar, 0))
pOptionData->bMouseSonar = FALSE;
pOptionData->bOrigMouseSonar = pOptionData->bMouseSonar;
/* Set mouse speed */
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SLIDER_MOUSE_SPEED);
SendMessage(hDlgCtrl, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(0, 19));
SendMessage(hDlgCtrl, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)pOptionData->ulMouseSpeed - 1);
if (pOptionData->MouseAccel.nAcceleration)
{
hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_POINTER_PRECISION);
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
if (pOptionData->bSnapToDefaultButton)
{
hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_SNAP_TO);
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
/* set mouse trail */
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SLIDER_POINTER_TRAIL);
SendMessage(hDlgCtrl, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(0, 5));
if (pOptionData->uMouseTrails < 2)
{
SendMessage(hDlgCtrl, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)5);
EnableWindow(hDlgCtrl, FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_TEXT_TRAIL_SHORT), FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_TEXT_TRAIL_LONG), FALSE);
}
else
{
SendDlgItemMessage(hwndDlg, IDC_CHECK_POINTER_TRAIL, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
SendMessage(hDlgCtrl, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)pOptionData->uMouseTrails - 2);
}
if (pOptionData->bMouseVanish)
{
hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_HIDE_POINTER);
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
if (pOptionData->bMouseSonar)
{
hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_SHOW_POINTER);
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
break;
case WM_DESTROY:
HeapFree(GetProcessHeap(), 0, pOptionData);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_CHECK_POINTER_PRECISION:
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_POINTER_PRECISION))
{
pOptionData->MouseAccel.nAcceleration = 0;
pOptionData->MouseAccel.nThreshold1 = 0;
pOptionData->MouseAccel.nThreshold2 = 0;
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
}
else
{
pOptionData->MouseAccel.nAcceleration = 1;
pOptionData->MouseAccel.nThreshold1 = 6;
pOptionData->MouseAccel.nThreshold2 = 10;
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
SystemParametersInfo(SPI_SETMOUSE, 0, &pOptionData->MouseAccel, 0);
break;
case IDC_CHECK_SNAP_TO:
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_SNAP_TO))
{
pOptionData->bSnapToDefaultButton = 0;
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
}
else
{
pOptionData->bSnapToDefaultButton = 1;
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
SystemParametersInfo(SPI_SETSNAPTODEFBUTTON, (UINT)pOptionData->bSnapToDefaultButton, 0, 0);
break;
case IDC_CHECK_POINTER_TRAIL:
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SLIDER_POINTER_TRAIL);
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_POINTER_TRAIL))
{
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
EnableWindow(hDlgCtrl, FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_TEXT_TRAIL_SHORT), FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_TEXT_TRAIL_LONG), FALSE);
pOptionData->uMouseTrails = 0;
}
else
{
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
EnableWindow(hDlgCtrl, TRUE);
EnableWindow(GetDlgItem(hwndDlg, IDC_TEXT_TRAIL_SHORT), TRUE);
EnableWindow(GetDlgItem(hwndDlg, IDC_TEXT_TRAIL_LONG), TRUE);
pOptionData->uMouseTrails = (UINT)SendMessage(hDlgCtrl, TBM_GETPOS, 0, 0) + 2;
}
SystemParametersInfo(SPI_SETMOUSETRAILS, pOptionData->uMouseTrails, 0, 0);
break;
case IDC_CHECK_HIDE_POINTER:
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_HIDE_POINTER))
{
pOptionData->bMouseVanish = FALSE;
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
}
else
{
pOptionData->bMouseVanish = TRUE;
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
SystemParametersInfo(SPI_SETMOUSEVANISH, 0, (PVOID)pOptionData->bMouseVanish, 0);
break;
case IDC_CHECK_SHOW_POINTER:
if(IsDlgButtonChecked(hwndDlg, IDC_CHECK_SHOW_POINTER))
{
pOptionData->bMouseSonar = FALSE;
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
}
else
{
pOptionData->bMouseSonar = TRUE;
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
SystemParametersInfo(SPI_SETMOUSESONAR, 0, (PVOID)pOptionData->bMouseSonar, 0);
break;
}
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
case WM_NOTIFY:
lppsn = (LPPSHNOTIFY)lParam;
if (lppsn->hdr.code == PSN_APPLY)
{
/* Set mouse speed */
if (pOptionData->ulOrigMouseSpeed != pOptionData->ulMouseSpeed)
{
SystemParametersInfo(SPI_SETMOUSESPEED, 0, (PVOID)pOptionData->ulMouseSpeed, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
pOptionData->ulOrigMouseSpeed = pOptionData->ulMouseSpeed;
}
if (pOptionData->OrigMouseAccel.nAcceleration != pOptionData->MouseAccel.nAcceleration)
{
SystemParametersInfo(SPI_SETMOUSE, 0, &pOptionData->MouseAccel, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
pOptionData->OrigMouseAccel.nAcceleration = pOptionData->MouseAccel.nAcceleration;
pOptionData->OrigMouseAccel.nThreshold1 = pOptionData->MouseAccel.nThreshold1;
pOptionData->OrigMouseAccel.nThreshold2 = pOptionData->MouseAccel.nThreshold2;
}
/* set snap to default button */
if (pOptionData->bOrigSnapToDefaultButton != pOptionData->bSnapToDefaultButton)
{
SystemParametersInfo(SPI_SETSNAPTODEFBUTTON, (UINT)pOptionData->bSnapToDefaultButton, 0, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
pOptionData->bOrigSnapToDefaultButton = pOptionData->bSnapToDefaultButton;
}
/* Set mouse trails setting */
if (pOptionData->uOrigMouseTrails != pOptionData->uMouseTrails)
{
SystemParametersInfo(SPI_SETMOUSETRAILS, pOptionData->uMouseTrails, 0, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
pOptionData->uOrigMouseTrails = pOptionData->uMouseTrails;
}
/* hide pointer while typing */
if (pOptionData->bOrigMouseVanish != pOptionData->bMouseVanish)
{
SystemParametersInfo(SPI_SETMOUSEVANISH, 0, (PVOID)pOptionData->bMouseVanish, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
pOptionData->bOrigMouseVanish = pOptionData->bMouseVanish;
}
/* show pointer with Ctrl-Key */
if (pOptionData->bOrigMouseSonar != pOptionData->bMouseSonar)
{
SystemParametersInfo(SPI_SETMOUSESONAR, 0, (PVOID)pOptionData->bMouseSonar, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
pOptionData->bOrigMouseSonar = pOptionData->bMouseSonar;
}
return TRUE;
}
else if (lppsn->hdr.code == PSN_RESET)
{
/* Set the original mouse speed */
SystemParametersInfo(SPI_SETMOUSESPEED, 0, (PVOID)pOptionData->ulOrigMouseSpeed, 0);
SystemParametersInfo(SPI_SETMOUSE, 0, &pOptionData->OrigMouseAccel, 0);
SystemParametersInfo(SPI_SETSNAPTODEFBUTTON, (UINT)pOptionData->bOrigSnapToDefaultButton, 0, 0);
SystemParametersInfo(SPI_SETMOUSETRAILS, pOptionData->uOrigMouseTrails, 0, 0);
SystemParametersInfo(SPI_SETMOUSEVANISH, 0, (PVOID)pOptionData->bOrigMouseVanish, 0);
SystemParametersInfo(SPI_SETMOUSESONAR, 0, (PVOID)pOptionData->bOrigMouseSonar, 0);
}
break;
case WM_HSCROLL:
if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_SLIDER_MOUSE_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:
pOptionData->ulMouseSpeed = (ULONG)SendDlgItemMessage(hwndDlg, IDC_SLIDER_MOUSE_SPEED, TBM_GETPOS, 0, 0) + 1;
SystemParametersInfo(SPI_SETMOUSESPEED, 0, (PVOID)pOptionData->ulMouseSpeed, SPIF_SENDCHANGE);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
#if 0
case TB_THUMBTRACK:
pOptionData->ulMouseSpeed = (ULONG)HIWORD(wParam) + 1;
SystemParametersInfo(SPI_SETMOUSESPEED, 0, (PVOID)pOptionData->ulMouseSpeed, 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:
pOptionData->uMouseTrails = (ULONG)SendDlgItemMessage(hwndDlg, IDC_SLIDER_POINTER_TRAIL, TBM_GETPOS, 0, 0) + 2;
SystemParametersInfo(SPI_SETMOUSETRAILS, pOptionData->uMouseTrails, 0, SPIF_UPDATEINIFILE);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
case TB_THUMBTRACK:
pOptionData->uMouseTrails = (ULONG)HIWORD(wParam) + 2;
SystemParametersInfo(SPI_SETMOUSETRAILS, pOptionData->uMouseTrails, 0, SPIF_UPDATEINIFILE);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
}
break;
}
return FALSE;
}
static VOID
ShowDialogWheelControls(HWND hwndDlg, UINT uWheelScrollLines, BOOL bInit)
{
HWND hDlgCtrl;
if (uWheelScrollLines != WHEEL_PAGESCROLL)
{
hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_WHEEL_SCROLL_LINES);
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
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);
EnableWindow(hDlgCtrl, FALSE);
hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_WHEEL_SCROLL_PAGE);
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
/* Set the default scroll lines value */
if (bInit == TRUE)
SetDlgItemInt(hwndDlg, IDC_EDIT_WHEEL_SCROLL_LINES, DEFAULT_WHEEL_SCROLL_LINES, FALSE);
}
}
static INT_PTR CALLBACK
WheelProc(IN HWND hwndDlg,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam)
{
LPPSHNOTIFY lppsn;
PWHEEL_DATA pWheelData;
pWheelData = (PWHEEL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
switch (uMsg)
{
case WM_INITDIALOG:
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)
{
SetDlgItemInt(hwndDlg, IDC_EDIT_WHEEL_SCROLL_LINES, pWheelData->uWheelScrollLines, FALSE);
}
return TRUE;
case WM_DESTROY:
HeapFree(GetProcessHeap(), 0, pWheelData);
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_RADIO_WHEEL_SCROLL_LINES:
pWheelData->uWheelScrollLines = GetDlgItemInt(hwndDlg, IDC_EDIT_WHEEL_SCROLL_LINES, NULL, FALSE);
ShowDialogWheelControls(hwndDlg, pWheelData->uWheelScrollLines, FALSE);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
case IDC_RADIO_WHEEL_SCROLL_PAGE:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -