Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenkeyboard.c
Go to the documentation of this file.
00001 /* $Id: keyboard.c 29170 2007-09-23 22:59:00Z ekohl $ 00002 * 00003 * PROJECT: ReactOS Accessibility Control Panel 00004 * LICENSE: GPL - See COPYING in the top level directory 00005 * FILE: dll/cpl/access/keyboard.c 00006 * PURPOSE: Keyboard-related accessibility settings 00007 * COPYRIGHT: Copyright 2004 Johannes Anderwald (j_anderw@sbox.tugraz.at) 00008 * Copyright 2007 Eric Kohl 00009 */ 00010 00011 #include "access.h" 00012 00013 00014 #define BOUNCETICKS 5 00015 static UINT nBounceArray[BOUNCETICKS] = {500, 700, 1000, 1500, 2000}; 00016 00017 #define DELAYTICKS 5 00018 static UINT nDelayArray[DELAYTICKS] = {300, 700, 1000, 1500, 2000}; 00019 00020 #define REPEATTICKS 6 00021 static UINT nRepeatArray[REPEATTICKS] = {300, 500, 700, 1000, 1500, 2000}; 00022 00023 #define WAITTICKS 10 00024 static UINT nWaitArray[WAITTICKS] = {0, 300, 500, 700, 1000, 1500, 2000, 5000, 10000, 20000}; 00025 00026 00027 static VOID 00028 EnableFilterKeysTest(PGLOBAL_DATA pGlobalData) 00029 { 00030 pGlobalData->filterKeys.dwFlags |= FKF_FILTERKEYSON; 00031 pGlobalData->filterKeys.dwFlags &= ~FKF_INDICATOR; 00032 00033 SystemParametersInfo(SPI_SETFILTERKEYS, 00034 sizeof(FILTERKEYS), 00035 &pGlobalData->filterKeys, 00036 0); 00037 } 00038 00039 00040 static VOID 00041 DisableFilterKeysTest(PGLOBAL_DATA pGlobalData) 00042 { 00043 if (pGlobalData->oldFilterKeys.dwFlags & FKF_FILTERKEYSON) 00044 { 00045 pGlobalData->filterKeys.dwFlags |= FKF_FILTERKEYSON; 00046 } 00047 else 00048 { 00049 pGlobalData->filterKeys.dwFlags &= ~FKF_FILTERKEYSON; 00050 } 00051 00052 if (pGlobalData->oldFilterKeys.dwFlags & FKF_INDICATOR) 00053 { 00054 pGlobalData->filterKeys.dwFlags |= FKF_INDICATOR; 00055 } 00056 else 00057 { 00058 pGlobalData->filterKeys.dwFlags &= ~FKF_INDICATOR; 00059 } 00060 00061 SystemParametersInfo(SPI_SETFILTERKEYS, 00062 sizeof(FILTERKEYS), 00063 &pGlobalData->filterKeys, 00064 0); 00065 } 00066 00067 00068 /* Property page dialog callback */ 00069 INT_PTR CALLBACK 00070 StickyKeysDlgProc(HWND hwndDlg, 00071 UINT uMsg, 00072 WPARAM wParam, 00073 LPARAM lParam) 00074 { 00075 PGLOBAL_DATA pGlobalData; 00076 00077 pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); 00078 00079 switch (uMsg) 00080 { 00081 case WM_INITDIALOG: 00082 pGlobalData = (PGLOBAL_DATA)lParam; 00083 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); 00084 00085 memcpy(&pGlobalData->oldStickyKeys, 00086 &pGlobalData->stickyKeys, 00087 sizeof(STICKYKEYS)); 00088 00089 CheckDlgButton(hwndDlg, 00090 IDC_STICKY_ACTIVATE_CHECK, 00091 pGlobalData->stickyKeys.dwFlags & SKF_HOTKEYACTIVE ? BST_CHECKED : BST_UNCHECKED); 00092 00093 CheckDlgButton(hwndDlg, 00094 IDC_STICKY_LOCK_CHECK, 00095 pGlobalData->stickyKeys.dwFlags & SKF_TRISTATE ? BST_CHECKED : BST_UNCHECKED); 00096 00097 CheckDlgButton(hwndDlg, 00098 IDC_STICKY_UNLOCK_CHECK, 00099 pGlobalData->stickyKeys.dwFlags & SKF_TWOKEYSOFF ? BST_CHECKED : BST_UNCHECKED); 00100 00101 CheckDlgButton(hwndDlg, 00102 IDC_STICKY_SOUND_CHECK, 00103 pGlobalData->stickyKeys.dwFlags & SKF_AUDIBLEFEEDBACK ? BST_CHECKED : BST_UNCHECKED); 00104 00105 CheckDlgButton(hwndDlg, 00106 IDC_STICKY_STATUS_CHECK, 00107 pGlobalData->stickyKeys.dwFlags & SKF_INDICATOR ? BST_CHECKED : BST_UNCHECKED); 00108 break; 00109 00110 case WM_COMMAND: 00111 switch (LOWORD(wParam)) 00112 { 00113 case IDC_STICKY_ACTIVATE_CHECK: 00114 pGlobalData->stickyKeys.dwFlags ^= SKF_HOTKEYACTIVE; 00115 break; 00116 00117 case IDC_STICKY_LOCK_CHECK: 00118 pGlobalData->stickyKeys.dwFlags ^= SKF_TRISTATE; 00119 break; 00120 00121 case IDC_STICKY_UNLOCK_CHECK: 00122 pGlobalData->stickyKeys.dwFlags ^= SKF_TWOKEYSOFF; 00123 break; 00124 00125 case IDC_STICKY_SOUND_CHECK: 00126 pGlobalData->stickyKeys.dwFlags ^= SKF_AUDIBLEFEEDBACK; 00127 break; 00128 00129 case IDC_STICKY_STATUS_CHECK: 00130 pGlobalData->stickyKeys.dwFlags ^= SKF_INDICATOR; 00131 break; 00132 00133 case IDOK: 00134 EndDialog(hwndDlg, 00135 (pGlobalData->stickyKeys.dwFlags != pGlobalData->oldStickyKeys.dwFlags)); 00136 break; 00137 00138 case IDCANCEL: 00139 EndDialog(hwndDlg, FALSE); 00140 break; 00141 00142 default: 00143 break; 00144 } 00145 break; 00146 } 00147 00148 return FALSE; 00149 } 00150 00151 00152 static VOID 00153 AddComboBoxTime(HWND hwnd, INT nId, INT nTimeMs) 00154 { 00155 TCHAR szBuffer[32]; 00156 TCHAR szSeconds[20]; 00157 00158 if (LoadString(hApplet, IDS_SECONDS, szSeconds, 20) == 0) 00159 lstrcpy(szSeconds, L"Seconds"); 00160 00161 _stprintf(szBuffer, _T("%d.%d %s"), 00162 nTimeMs / 1000, (nTimeMs % 1000) / 100, 00163 szSeconds); 00164 00165 SendDlgItemMessage(hwnd, nId, CB_ADDSTRING, 0, (LPARAM)szBuffer); 00166 } 00167 00168 00169 INT_PTR CALLBACK 00170 BounceKeysDlgProc(HWND hwndDlg, 00171 UINT uMsg, 00172 WPARAM wParam, 00173 LPARAM lParam) 00174 { 00175 PGLOBAL_DATA pGlobalData; 00176 INT i, n; 00177 00178 pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); 00179 00180 switch (uMsg) 00181 { 00182 case WM_INITDIALOG: 00183 pGlobalData = (PGLOBAL_DATA)lParam; 00184 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); 00185 00186 /* Determine the current bounce time */ 00187 if (pGlobalData->filterKeys.iBounceMSec == 0) 00188 pGlobalData->filterKeys.iBounceMSec = nBounceArray[0]; 00189 00190 for (n = 0; n < BOUNCETICKS; n++) 00191 { 00192 if (pGlobalData->filterKeys.iBounceMSec < nBounceArray[n]) 00193 break; 00194 } 00195 n--; 00196 00197 for (i = 0; i < BOUNCETICKS; i++) 00198 { 00199 AddComboBoxTime(hwndDlg, IDC_BOUNCE_TIME_COMBO, nBounceArray[i]); 00200 } 00201 00202 SendDlgItemMessage(hwndDlg, IDC_BOUNCE_TIME_COMBO, CB_SETCURSEL, n, 0); 00203 break; 00204 00205 case WM_COMMAND: 00206 switch (LOWORD(wParam)) 00207 { 00208 case IDC_BOUNCE_TIME_COMBO: 00209 if (HIWORD(wParam) == CBN_SELCHANGE) 00210 { 00211 i = SendDlgItemMessage(hwndDlg, IDC_BOUNCE_TIME_COMBO, CB_GETCURSEL, 0, 0); 00212 if (i != CB_ERR) 00213 { 00214 pGlobalData->filterKeys.iBounceMSec = nBounceArray[i]; 00215 } 00216 } 00217 break; 00218 00219 case IDC_BOUNCE_TEST_EDIT: 00220 switch (HIWORD(wParam)) 00221 { 00222 case EN_SETFOCUS: 00223 EnableFilterKeysTest(pGlobalData); 00224 break; 00225 00226 case EN_KILLFOCUS: 00227 DisableFilterKeysTest(pGlobalData); 00228 break; 00229 } 00230 break; 00231 00232 case IDOK: 00233 EndDialog(hwndDlg, TRUE); 00234 break; 00235 00236 case IDCANCEL: 00237 EndDialog(hwndDlg, FALSE); 00238 break; 00239 00240 default: 00241 break; 00242 } 00243 break; 00244 } 00245 00246 return FALSE; 00247 } 00248 00249 00250 INT_PTR CALLBACK 00251 RepeatKeysDlgProc(HWND hwndDlg, 00252 UINT uMsg, 00253 WPARAM wParam, 00254 LPARAM lParam) 00255 { 00256 PGLOBAL_DATA pGlobalData; 00257 INT i, n; 00258 00259 pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); 00260 00261 switch (uMsg) 00262 { 00263 case WM_INITDIALOG: 00264 pGlobalData = (PGLOBAL_DATA)lParam; 00265 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); 00266 00267 CheckRadioButton(hwndDlg, 00268 IDC_REPEAT_NOREPEAT_RADIO, 00269 IDC_REPEAT_REPEAT_RADIO, 00270 (pGlobalData->filterKeys.iDelayMSec == 0) ? IDC_REPEAT_NOREPEAT_RADIO : IDC_REPEAT_REPEAT_RADIO); 00271 00272 /* Initialize the delay combobox */ 00273 for (n = 0; n < DELAYTICKS; n++) 00274 { 00275 if (pGlobalData->filterKeys.iDelayMSec < nDelayArray[n]) 00276 break; 00277 } 00278 n--; 00279 00280 for (i = 0; i < DELAYTICKS; i++) 00281 { 00282 AddComboBoxTime(hwndDlg, IDC_REPEAT_DELAY_COMBO, nDelayArray[i]); 00283 } 00284 00285 SendDlgItemMessage(hwndDlg, IDC_REPEAT_DELAY_COMBO, CB_SETCURSEL, n, 0); 00286 00287 /* Initialize the repeat combobox */ 00288 for (n = 0; n < REPEATTICKS; n++) 00289 { 00290 if (pGlobalData->filterKeys.iRepeatMSec < nRepeatArray[n]) 00291 break; 00292 } 00293 n--; 00294 00295 for (i = 0; i < REPEATTICKS; i++) 00296 { 00297 AddComboBoxTime(hwndDlg, IDC_REPEAT_REPEAT_COMBO, nRepeatArray[i]); 00298 } 00299 00300 SendDlgItemMessage(hwndDlg, IDC_REPEAT_REPEAT_COMBO, CB_SETCURSEL, n, 0); 00301 00302 /* Disable the delay and repeat comboboxes if needed */ 00303 if (pGlobalData->filterKeys.iDelayMSec == 0) 00304 { 00305 EnableWindow(GetDlgItem(hwndDlg, IDC_REPEAT_DELAY_COMBO), FALSE); 00306 EnableWindow(GetDlgItem(hwndDlg, IDC_REPEAT_REPEAT_COMBO), FALSE); 00307 } 00308 00309 /* Initialize the wait combobox */ 00310 for (n = 0; n < WAITTICKS; n++) 00311 { 00312 if (pGlobalData->filterKeys.iWaitMSec < nWaitArray[n]) 00313 break; 00314 } 00315 n--; 00316 00317 for (i = 0; i < WAITTICKS; i++) 00318 { 00319 AddComboBoxTime(hwndDlg, IDC_REPEAT_WAIT_COMBO, nWaitArray[i]); 00320 } 00321 00322 SendDlgItemMessage(hwndDlg, IDC_REPEAT_WAIT_COMBO, CB_SETCURSEL, n, 0); 00323 break; 00324 00325 case WM_COMMAND: 00326 switch (LOWORD(wParam)) 00327 { 00328 case IDC_REPEAT_NOREPEAT_RADIO: 00329 pGlobalData->filterKeys.iDelayMSec = 0; 00330 pGlobalData->filterKeys.iRepeatMSec = 0; 00331 EnableWindow(GetDlgItem(hwndDlg, IDC_REPEAT_DELAY_COMBO), FALSE); 00332 EnableWindow(GetDlgItem(hwndDlg, IDC_REPEAT_REPEAT_COMBO), FALSE); 00333 break; 00334 00335 case IDC_REPEAT_REPEAT_RADIO: 00336 EnableWindow(GetDlgItem(hwndDlg, IDC_REPEAT_DELAY_COMBO), TRUE); 00337 EnableWindow(GetDlgItem(hwndDlg, IDC_REPEAT_REPEAT_COMBO), TRUE); 00338 break; 00339 00340 case IDC_REPEAT_DELAY_COMBO: 00341 if (HIWORD(wParam) == CBN_SELCHANGE) 00342 { 00343 i = SendDlgItemMessage(hwndDlg, IDC_REPEAT_DELAY_COMBO, CB_GETCURSEL, 0, 0); 00344 if (i != CB_ERR) 00345 { 00346 pGlobalData->filterKeys.iDelayMSec = nDelayArray[i]; 00347 } 00348 } 00349 break; 00350 00351 case IDC_REPEAT_REPEAT_COMBO: 00352 if (HIWORD(wParam) == CBN_SELCHANGE) 00353 { 00354 i = SendDlgItemMessage(hwndDlg, IDC_REPEAT_REPEAT_COMBO, CB_GETCURSEL, 0, 0); 00355 if (i != CB_ERR) 00356 { 00357 pGlobalData->filterKeys.iRepeatMSec = nRepeatArray[i]; 00358 } 00359 } 00360 break; 00361 00362 case IDC_REPEAT_WAIT_COMBO: 00363 if (HIWORD(wParam) == CBN_SELCHANGE) 00364 { 00365 i = SendDlgItemMessage(hwndDlg, IDC_REPEAT_WAIT_COMBO, CB_GETCURSEL, 0, 0); 00366 if (i != CB_ERR) 00367 { 00368 pGlobalData->filterKeys.iWaitMSec = nWaitArray[i]; 00369 } 00370 } 00371 break; 00372 00373 case IDC_REPEAT_TEST_EDIT: 00374 switch (HIWORD(wParam)) 00375 { 00376 case EN_SETFOCUS: 00377 EnableFilterKeysTest(pGlobalData); 00378 break; 00379 00380 case EN_KILLFOCUS: 00381 DisableFilterKeysTest(pGlobalData); 00382 break; 00383 } 00384 break; 00385 00386 case IDOK: 00387 EndDialog(hwndDlg, TRUE); 00388 break; 00389 00390 case IDCANCEL: 00391 EndDialog(hwndDlg, FALSE); 00392 break; 00393 00394 default: 00395 break; 00396 } 00397 break; 00398 } 00399 00400 return FALSE; 00401 } 00402 00403 00404 /* Property page dialog callback */ 00405 INT_PTR CALLBACK 00406 FilterKeysDlgProc(HWND hwndDlg, 00407 UINT uMsg, 00408 WPARAM wParam, 00409 LPARAM lParam) 00410 { 00411 PGLOBAL_DATA pGlobalData; 00412 00413 pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); 00414 00415 switch (uMsg) 00416 { 00417 case WM_INITDIALOG: 00418 pGlobalData = (PGLOBAL_DATA)lParam; 00419 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); 00420 00421 memcpy(&pGlobalData->oldFilterKeys, 00422 &pGlobalData->filterKeys, 00423 sizeof(FILTERKEYS)); 00424 00425 CheckDlgButton(hwndDlg, 00426 IDC_FILTER_ACTIVATE_CHECK, 00427 pGlobalData->filterKeys.dwFlags & FKF_HOTKEYACTIVE ? BST_CHECKED : BST_UNCHECKED); 00428 00429 if (pGlobalData->filterKeys.iBounceMSec != 0) 00430 { 00431 CheckRadioButton(hwndDlg, IDC_FILTER_BOUNCE_RADIO, IDC_FILTER_REPEAT_RADIO, IDC_FILTER_BOUNCE_RADIO); 00432 EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_BOUNCE_BUTTON), TRUE); 00433 EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_REPEAT_BUTTON), FALSE); 00434 } 00435 else 00436 { 00437 CheckRadioButton(hwndDlg, IDC_FILTER_BOUNCE_RADIO, IDC_FILTER_REPEAT_RADIO, IDC_FILTER_REPEAT_RADIO); 00438 EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_BOUNCE_BUTTON), FALSE); 00439 EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_REPEAT_BUTTON), TRUE); 00440 } 00441 00442 CheckDlgButton(hwndDlg, 00443 IDC_FILTER_SOUND_CHECK, 00444 pGlobalData->filterKeys.dwFlags & FKF_CLICKON ? BST_CHECKED : BST_UNCHECKED); 00445 00446 CheckDlgButton(hwndDlg, 00447 IDC_FILTER_STATUS_CHECK, 00448 pGlobalData->filterKeys.dwFlags & FKF_INDICATOR ? BST_CHECKED : BST_UNCHECKED); 00449 break; 00450 00451 case WM_COMMAND: 00452 switch (LOWORD(wParam)) 00453 { 00454 case IDC_FILTER_ACTIVATE_CHECK: 00455 pGlobalData->filterKeys.dwFlags ^= FKF_HOTKEYACTIVE; 00456 break; 00457 00458 case IDC_FILTER_BOUNCE_RADIO: 00459 EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_BOUNCE_BUTTON), TRUE); 00460 EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_REPEAT_BUTTON), FALSE); 00461 break; 00462 00463 case IDC_FILTER_REPEAT_RADIO: 00464 EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_BOUNCE_BUTTON), FALSE); 00465 EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_REPEAT_BUTTON), TRUE); 00466 break; 00467 00468 case IDC_FILTER_BOUNCE_BUTTON: 00469 DialogBoxParam(hApplet, 00470 MAKEINTRESOURCE(IDD_BOUNCEKEYSOPTIONS), 00471 hwndDlg, 00472 (DLGPROC)BounceKeysDlgProc, 00473 (LPARAM)pGlobalData); 00474 break; 00475 00476 case IDC_FILTER_TEST_EDIT: 00477 switch (HIWORD(wParam)) 00478 { 00479 case EN_SETFOCUS: 00480 EnableFilterKeysTest(pGlobalData); 00481 break; 00482 00483 case EN_KILLFOCUS: 00484 DisableFilterKeysTest(pGlobalData); 00485 break; 00486 } 00487 break; 00488 00489 case IDC_FILTER_SOUND_CHECK: 00490 pGlobalData->filterKeys.dwFlags ^= FKF_CLICKON; 00491 break; 00492 00493 case IDC_FILTER_REPEAT_BUTTON: 00494 DialogBoxParam(hApplet, 00495 MAKEINTRESOURCE(IDD_REPEATKEYSOPTIONS), 00496 hwndDlg, 00497 (DLGPROC)RepeatKeysDlgProc, 00498 (LPARAM)pGlobalData); 00499 break; 00500 00501 case IDC_FILTER_STATUS_CHECK: 00502 pGlobalData->filterKeys.dwFlags ^= FKF_INDICATOR; 00503 break; 00504 00505 case IDOK: 00506 EndDialog(hwndDlg, 00507 (pGlobalData->filterKeys.dwFlags != pGlobalData->oldFilterKeys.dwFlags)); 00508 break; 00509 00510 case IDCANCEL: 00511 EndDialog(hwndDlg, FALSE); 00512 break; 00513 00514 default: 00515 break; 00516 } 00517 break; 00518 } 00519 00520 return FALSE; 00521 } 00522 00523 00524 /* Property page dialog callback */ 00525 INT_PTR CALLBACK 00526 ToggleKeysDlgProc(HWND hwndDlg, 00527 UINT uMsg, 00528 WPARAM wParam, 00529 LPARAM lParam) 00530 { 00531 PGLOBAL_DATA pGlobalData; 00532 00533 pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); 00534 00535 switch (uMsg) 00536 { 00537 case WM_INITDIALOG: 00538 pGlobalData = (PGLOBAL_DATA)lParam; 00539 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); 00540 00541 memcpy(&pGlobalData->oldToggleKeys, 00542 &pGlobalData->toggleKeys, 00543 sizeof(TOGGLEKEYS)); 00544 00545 CheckDlgButton(hwndDlg, 00546 IDC_TOGGLE_ACTIVATE_CHECK, 00547 pGlobalData->toggleKeys.dwFlags & TKF_HOTKEYACTIVE ? BST_CHECKED : BST_UNCHECKED); 00548 break; 00549 00550 case WM_COMMAND: 00551 switch (LOWORD(wParam)) 00552 { 00553 case IDC_TOGGLE_ACTIVATE_CHECK: 00554 pGlobalData->toggleKeys.dwFlags ^= TKF_HOTKEYACTIVE; 00555 break; 00556 00557 case IDOK: 00558 EndDialog(hwndDlg, 00559 (pGlobalData->toggleKeys.dwFlags != pGlobalData->oldToggleKeys.dwFlags)); 00560 break; 00561 00562 case IDCANCEL: 00563 EndDialog(hwndDlg, FALSE); 00564 break; 00565 00566 default: 00567 break; 00568 } 00569 break; 00570 } 00571 00572 return FALSE; 00573 } 00574 00575 00576 /* Property page dialog callback */ 00577 INT_PTR CALLBACK 00578 KeyboardPageProc(HWND hwndDlg, 00579 UINT uMsg, 00580 WPARAM wParam, 00581 LPARAM lParam) 00582 { 00583 PGLOBAL_DATA pGlobalData; 00584 LPPSHNOTIFY lppsn; 00585 00586 pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); 00587 00588 switch (uMsg) 00589 { 00590 case WM_INITDIALOG: 00591 pGlobalData = (PGLOBAL_DATA)((LPPROPSHEETPAGE)lParam)->lParam; 00592 if (pGlobalData == NULL) 00593 return FALSE; 00594 00595 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); 00596 00597 CheckDlgButton(hwndDlg, 00598 IDC_STICKY_BOX, 00599 pGlobalData->stickyKeys.dwFlags & SKF_STICKYKEYSON ? BST_CHECKED : BST_UNCHECKED); 00600 00601 CheckDlgButton(hwndDlg, 00602 IDC_FILTER_BOX, 00603 pGlobalData->filterKeys.dwFlags & FKF_FILTERKEYSON ? BST_CHECKED : BST_UNCHECKED); 00604 00605 CheckDlgButton(hwndDlg, 00606 IDC_TOGGLE_BOX, 00607 pGlobalData->toggleKeys.dwFlags & TKF_TOGGLEKEYSON ? BST_CHECKED : BST_UNCHECKED); 00608 00609 CheckDlgButton(hwndDlg, 00610 IDC_KEYBOARD_EXTRA, 00611 pGlobalData->bKeyboardPref ? BST_CHECKED : BST_UNCHECKED); 00612 return TRUE; 00613 00614 case WM_COMMAND: 00615 switch (LOWORD(wParam)) 00616 { 00617 case IDC_STICKY_BOX: 00618 pGlobalData->stickyKeys.dwFlags ^= SKF_STICKYKEYSON; 00619 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00620 break; 00621 00622 case IDC_STICKY_BUTTON: 00623 if (DialogBoxParam(hApplet, 00624 MAKEINTRESOURCE(IDD_STICKYKEYSOPTIONS), 00625 hwndDlg, 00626 (DLGPROC)StickyKeysDlgProc, 00627 (LPARAM)pGlobalData)) 00628 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00629 break; 00630 00631 case IDC_FILTER_BOX: 00632 pGlobalData->filterKeys.dwFlags ^= FKF_FILTERKEYSON; 00633 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00634 break; 00635 00636 case IDC_FILTER_BUTTON: 00637 if (DialogBoxParam(hApplet, 00638 MAKEINTRESOURCE(IDD_FILTERKEYSOPTIONS), 00639 hwndDlg, 00640 (DLGPROC)FilterKeysDlgProc, 00641 (LPARAM)pGlobalData)) 00642 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00643 break; 00644 00645 case IDC_TOGGLE_BOX: 00646 pGlobalData->toggleKeys.dwFlags ^= TKF_TOGGLEKEYSON; 00647 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00648 break; 00649 00650 case IDC_TOGGLE_BUTTON: 00651 if (DialogBoxParam(hApplet, 00652 MAKEINTRESOURCE(IDD_TOGGLEKEYSOPTIONS), 00653 hwndDlg, 00654 (DLGPROC)ToggleKeysDlgProc, 00655 (LPARAM)pGlobalData)) 00656 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00657 break; 00658 00659 case IDC_KEYBOARD_EXTRA: 00660 pGlobalData->bKeyboardPref = !pGlobalData->bKeyboardPref; 00661 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00662 break; 00663 00664 default: 00665 break; 00666 } 00667 break; 00668 00669 case WM_NOTIFY: 00670 lppsn = (LPPSHNOTIFY)lParam; 00671 if (lppsn->hdr.code == PSN_APPLY) 00672 { 00673 SystemParametersInfo(SPI_SETSTICKYKEYS, 00674 sizeof(STICKYKEYS), 00675 &pGlobalData->stickyKeys, 00676 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE /*0*/); 00677 00678 SystemParametersInfo(SPI_SETFILTERKEYS, 00679 sizeof(FILTERKEYS), 00680 &pGlobalData->filterKeys, 00681 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE /*0*/); 00682 00683 SystemParametersInfo(SPI_SETTOGGLEKEYS, 00684 sizeof(TOGGLEKEYS), 00685 &pGlobalData->toggleKeys, 00686 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE /*0*/); 00687 00688 SystemParametersInfo(SPI_SETKEYBOARDPREF, 00689 pGlobalData->bKeyboardPref, 00690 NULL, 00691 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE /*0*/); 00692 00693 return TRUE; 00694 } 00695 break; 00696 } 00697 00698 return FALSE; 00699 } Generated on Sun May 27 2012 04:18:59 for ReactOS by
1.7.6.1
|