Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

228 lines
6.7 KiB

  1. /*******************************************************************
  2. *
  3. * DESCRIPTION: Mouse Dialog handler
  4. *
  5. * HISTORY:
  6. *
  7. *******************************************************************/
  8. #include <assert.h>
  9. /*******************************************************************
  10. *
  11. * DESCRIPTION: Mouse Keys Dialog handler
  12. *
  13. * HISTORY:
  14. *
  15. *******************************************************************/
  16. #include "Access.h"
  17. #define TICKCOUNT 9
  18. INT_PTR WINAPI MouseKeyDlg (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  19. static UINT uSpeedTable[TICKCOUNT] =
  20. { 10, 20, 30, 40, 60, 80, 120, 180, 360 };
  21. int i;
  22. BOOL fProcessed = TRUE;
  23. switch (uMsg) {
  24. case WM_INITDIALOG:
  25. CheckDlgButton(hwnd, IDC_MK_HOTKEY, (g_mk.dwFlags & MKF_HOTKEYACTIVE) ? TRUE : FALSE);
  26. // Determine settings on our scroll bars for accel and top speed.
  27. for (i = 0;
  28. i < ARRAY_SIZE(uSpeedTable) && uSpeedTable[i] < g_mk.iMaxSpeed;
  29. i++)
  30. {
  31. }
  32. if (ARRAY_SIZE(uSpeedTable) <= i)
  33. {
  34. i = ARRAY_SIZE(uSpeedTable);
  35. }
  36. SendDlgItemMessage(
  37. hwnd,
  38. IDC_MK_TOPSPEED,
  39. TBM_SETRANGE,
  40. TRUE,
  41. MAKELONG(0, ARRAY_SIZE(uSpeedTable)-1));
  42. SendDlgItemMessage(
  43. hwnd, IDC_MK_TOPSPEED, TBM_SETPOS, TRUE, i);
  44. // Acceleration
  45. i = (TICKCOUNT+1) - g_mk.iTimeToMaxSpeed/500;
  46. if (i > TICKCOUNT-1)
  47. {
  48. i = TICKCOUNT-1;
  49. }
  50. if (i < 0)
  51. {
  52. i = 0;
  53. }
  54. SendDlgItemMessage(
  55. hwnd,
  56. IDC_MK_ACCEL,
  57. TBM_SETRANGE,
  58. TRUE,
  59. MAKELONG(0, TICKCOUNT-1));
  60. SendDlgItemMessage(
  61. hwnd,
  62. IDC_MK_ACCEL,
  63. TBM_SETPOS,
  64. TRUE,
  65. i);
  66. // Hold down Ctrl to speed up and Shift to slow down
  67. CheckDlgButton(hwnd, IDC_MK_USEMODKEYS, (g_mk.dwFlags & MKF_MODIFIERS) ? TRUE : FALSE);
  68. // Use MouseKeys when NumLock is on/off
  69. if (g_mk.dwFlags & MKF_REPLACENUMBERS)
  70. CheckRadioButton(hwnd, IDC_MK_NLOFF, IDC_MK_NLON, IDC_MK_NLON);
  71. else
  72. CheckRadioButton(hwnd, IDC_MK_NLOFF, IDC_MK_NLON, IDC_MK_NLOFF);
  73. // Show MouseKey status on screen
  74. CheckDlgButton(hwnd, IDC_MK_STATUS, (g_mk.dwFlags & MKF_INDICATOR) ? TRUE : FALSE);
  75. // 3/15/95 -
  76. // Always init the control speed to 1/8 of the screen width/
  77. g_mk.iCtrlSpeed = GetSystemMetrics(SM_CXSCREEN) / 16;
  78. break;
  79. case WM_HSCROLL:
  80. {
  81. int nScrollCode = (int) LOWORD(wParam); // scroll bar value
  82. int nPos = (short int) HIWORD(wParam); // scroll box position
  83. HWND hwndScrollBar = (HWND) lParam; // handle of scroll bar
  84. // Set the scrolls position
  85. i = HandleScroll(hwnd, wParam, hwndScrollBar);
  86. if (-1 != i)
  87. {
  88. // Update it.
  89. switch(GetWindowLong(hwndScrollBar, GWL_ID))
  90. {
  91. case IDC_MK_TOPSPEED:
  92. g_mk.iMaxSpeed = uSpeedTable[i];
  93. break;
  94. case IDC_MK_ACCEL:
  95. g_mk.iTimeToMaxSpeed = (TICKCOUNT+1-i) * 500;
  96. break;
  97. default:
  98. Assert(!"Got WM_HSCROLL from unknown control");
  99. break;
  100. }
  101. }
  102. }
  103. break;
  104. case WM_HELP: // F1
  105. WinHelp(((LPHELPINFO) lParam)->hItemHandle, __TEXT("access.hlp"), HELP_WM_HELP, (DWORD_PTR) (LPSTR) g_aIds);
  106. break;
  107. case WM_CONTEXTMENU: // right mouse click
  108. WinHelp((HWND) wParam, __TEXT("access.hlp"), HELP_CONTEXTMENU, (DWORD_PTR) (LPSTR) g_aIds);
  109. break;
  110. // Handle the generic commands
  111. case WM_COMMAND:
  112. switch (GET_WM_COMMAND_ID(wParam, lParam)) {
  113. case IDC_MK_HOTKEY:
  114. g_mk.dwFlags ^= MKF_HOTKEYACTIVE; break;
  115. case IDC_MK_STATUS:
  116. g_mk.dwFlags ^= MKF_INDICATOR; break;
  117. case IDC_MK_USEMODKEYS:
  118. g_mk.dwFlags ^= MKF_MODIFIERS; break;
  119. case IDC_MK_NLOFF:
  120. g_mk.dwFlags &= ~MKF_REPLACENUMBERS;
  121. CheckRadioButton(hwnd, IDC_MK_NLOFF, IDC_MK_NLON, IDC_MK_NLOFF);
  122. break;
  123. case IDC_MK_NLON:
  124. g_mk.dwFlags |= MKF_REPLACENUMBERS;
  125. CheckRadioButton(hwnd, IDC_MK_NLOFF,IDC_MK_NLON, IDC_MK_NLON);
  126. break;
  127. case IDOK:
  128. EndDialog(hwnd, IDOK);
  129. break;
  130. case IDCANCEL:
  131. EndDialog(hwnd, IDCANCEL);
  132. break;
  133. }
  134. break;
  135. default: fProcessed = FALSE; break;
  136. }
  137. return(fProcessed);
  138. }
  139. // *******************************************************************
  140. // Mouse Dialog handler
  141. // *******************************************************************
  142. INT_PTR WINAPI MouseDlg (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  143. MOUSEKEYS mk;
  144. BOOL fProcessed = TRUE;
  145. switch (uMsg) {
  146. case WM_INITDIALOG:
  147. CheckDlgButton(hwnd, IDC_MK_ENABLE, (g_mk.dwFlags & MKF_MOUSEKEYSON) ? TRUE : FALSE);
  148. if (!(g_mk.dwFlags & MKF_AVAILABLE)) {
  149. EnableWindow(GetDlgItem(hwnd, IDC_MK_SETTINGS), FALSE);
  150. EnableWindow(GetDlgItem(hwnd, IDC_MK_ENABLE), FALSE);
  151. }
  152. break;
  153. case WM_HELP: // F1
  154. WinHelp(((LPHELPINFO) lParam)->hItemHandle, __TEXT("access.hlp"), HELP_WM_HELP, (DWORD_PTR) (LPSTR) g_aIds);
  155. break;
  156. case WM_CONTEXTMENU: // right mouse click
  157. WinHelp((HWND) wParam, __TEXT("access.hlp"), HELP_CONTEXTMENU, (DWORD_PTR) (LPSTR) g_aIds);
  158. break;
  159. case WM_COMMAND:
  160. switch (GET_WM_COMMAND_ID(wParam, lParam)) {
  161. case IDC_MK_ENABLE:
  162. g_mk.dwFlags ^= MKF_MOUSEKEYSON;
  163. SendMessage(GetParent(hwnd), PSM_CHANGED, (WPARAM) hwnd, 0);
  164. break;
  165. case IDC_MK_SETTINGS:
  166. mk = g_mk; // Save settings before letting the user play with global
  167. if (DialogBox(g_hinst, MAKEINTRESOURCE(IDD_MOUSESETTINGS), hwnd, MouseKeyDlg) == IDCANCEL) {
  168. // User cancelled, restore settings.
  169. g_mk = mk;
  170. } else SendMessage(GetParent(hwnd), PSM_CHANGED, (WPARAM) hwnd, 0);
  171. break;
  172. }
  173. break;
  174. case WM_NOTIFY:
  175. switch (((NMHDR *)lParam)->code) {
  176. case PSN_APPLY: SetAccessibilitySettings(); break;
  177. }
  178. break;
  179. default: fProcessed = FALSE; break;
  180. }
  181. return(fProcessed);
  182. }
  183. ///////////////////////////////// End of File /////////////////////////////////