Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygendisplay.c
Go to the documentation of this file.
00001 /* $Id: display.c 29112 2007-09-19 21:31:49Z ekohl $ 00002 * 00003 * PROJECT: ReactOS Accessibility Control Panel 00004 * LICENSE: GPL - See COPYING in the top level directory 00005 * FILE: dll/cpl/access/display.c 00006 * PURPOSE: Display-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 ID_BLINK_TIMER 346 00015 00016 00017 static VOID 00018 FillColorSchemeComboBox(HWND hwnd) 00019 { 00020 TCHAR szValue[128]; 00021 DWORD dwDisposition; 00022 DWORD dwLength; 00023 HKEY hKey; 00024 LONG lError; 00025 INT i; 00026 00027 lError = RegCreateKeyEx(HKEY_CURRENT_USER, 00028 _T("Control Panel\\Appearance\\Schemes"), 00029 0, 00030 NULL, 00031 REG_OPTION_NON_VOLATILE, 00032 KEY_ENUMERATE_SUB_KEYS | KEY_EXECUTE | KEY_QUERY_VALUE, 00033 NULL, 00034 &hKey, 00035 &dwDisposition); 00036 if (lError != ERROR_SUCCESS) 00037 return; 00038 00039 for (i = 0; ; i++) 00040 { 00041 dwLength = 128; 00042 lError = RegEnumValue(hKey, 00043 i, 00044 szValue, 00045 &dwLength, NULL, NULL, NULL, NULL); 00046 if (lError == ERROR_NO_MORE_ITEMS) 00047 break; 00048 00049 SendMessage(hwnd, 00050 CB_ADDSTRING, 00051 0, 00052 (LPARAM)szValue); 00053 } 00054 00055 RegCloseKey(hKey); 00056 } 00057 00058 00059 INT_PTR CALLBACK 00060 HighContrastDlgProc(HWND hwndDlg, 00061 UINT uMsg, 00062 WPARAM wParam, 00063 LPARAM lParam) 00064 { 00065 PGLOBAL_DATA pGlobalData; 00066 00067 pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); 00068 00069 switch (uMsg) 00070 { 00071 case WM_INITDIALOG: 00072 pGlobalData = (PGLOBAL_DATA)lParam; 00073 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); 00074 00075 CheckDlgButton(hwndDlg, 00076 IDC_CONTRAST_ACTIVATE_CHECK, 00077 pGlobalData->highContrast.dwFlags & HCF_HOTKEYACTIVE ? BST_CHECKED : BST_UNCHECKED); 00078 00079 FillColorSchemeComboBox(GetDlgItem(hwndDlg, IDC_CONTRAST_COMBO)); 00080 00081 SendDlgItemMessage(hwndDlg, 00082 IDC_CONTRAST_COMBO, 00083 CB_SELECTSTRING, 00084 (WPARAM)-1, 00085 (LPARAM)pGlobalData->highContrast.lpszDefaultScheme); 00086 break; 00087 00088 case WM_COMMAND: 00089 switch (LOWORD(wParam)) 00090 { 00091 case IDC_CONTRAST_ACTIVATE_CHECK: 00092 pGlobalData->highContrast.dwFlags ^= HCF_HOTKEYACTIVE; 00093 break; 00094 00095 case IDC_CONTRAST_COMBO: 00096 if (HIWORD(wParam) == CBN_SELCHANGE) 00097 { 00098 INT nSel; 00099 00100 nSel = SendDlgItemMessage(hwndDlg, IDC_CONTRAST_COMBO, 00101 CB_GETCURSEL, 0, 0); 00102 SendDlgItemMessage(hwndDlg, IDC_CONTRAST_COMBO, 00103 CB_GETLBTEXT, nSel, 00104 (LPARAM)pGlobalData->highContrast.lpszDefaultScheme); 00105 } 00106 break; 00107 00108 case IDOK: 00109 EndDialog(hwndDlg, TRUE); 00110 break; 00111 00112 case IDCANCEL: 00113 EndDialog(hwndDlg, FALSE); 00114 break; 00115 00116 default: 00117 break; 00118 } 00119 break; 00120 } 00121 00122 return FALSE; 00123 } 00124 00125 00126 /* Property page dialog callback */ 00127 INT_PTR CALLBACK 00128 DisplayPageProc(HWND hwndDlg, 00129 UINT uMsg, 00130 WPARAM wParam, 00131 LPARAM lParam) 00132 { 00133 PGLOBAL_DATA pGlobalData; 00134 LPPSHNOTIFY lppsn; 00135 INT i; 00136 00137 pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); 00138 00139 switch (uMsg) 00140 { 00141 case WM_INITDIALOG: 00142 pGlobalData = (PGLOBAL_DATA)((LPPROPSHEETPAGE)lParam)->lParam; 00143 if (pGlobalData == NULL) 00144 return FALSE; 00145 00146 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); 00147 00148 pGlobalData->fShowCaret = TRUE; 00149 GetWindowRect(GetDlgItem(hwndDlg, IDC_CURSOR_WIDTH_TEXT), &pGlobalData->rcCaret); 00150 ScreenToClient(hwndDlg, (LPPOINT)&pGlobalData->rcCaret.left); 00151 ScreenToClient(hwndDlg, (LPPOINT)&pGlobalData->rcCaret.right); 00152 CopyRect(&pGlobalData->rcOldCaret, &pGlobalData->rcCaret); 00153 00154 pGlobalData->rcCaret.right = pGlobalData->rcCaret.left + pGlobalData->uCaretWidth; 00155 00156 /* Set the checkbox */ 00157 CheckDlgButton(hwndDlg, 00158 IDC_CONTRAST_BOX, 00159 pGlobalData->highContrast.dwFlags & HCF_HIGHCONTRASTON ? BST_CHECKED : BST_UNCHECKED); 00160 00161 SendDlgItemMessage(hwndDlg, IDC_CURSOR_BLINK_TRACK, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(0, 10)); 00162 SendDlgItemMessage(hwndDlg, IDC_CURSOR_BLINK_TRACK, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(12 - (pGlobalData->uCaretBlinkTime / 100))); 00163 00164 SendDlgItemMessage(hwndDlg, IDC_CURSOR_WIDTH_TRACK, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(0, 19)); 00165 SendDlgItemMessage(hwndDlg, IDC_CURSOR_WIDTH_TRACK, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(pGlobalData->uCaretWidth - 1)); 00166 00167 /* Start the blink timer */ 00168 SetTimer(hwndDlg, ID_BLINK_TIMER, pGlobalData->uCaretBlinkTime, NULL); 00169 return TRUE; 00170 00171 case WM_COMMAND: 00172 switch (LOWORD(wParam)) 00173 { 00174 case IDC_CONTRAST_BOX: 00175 pGlobalData->highContrast.dwFlags ^= HCF_HIGHCONTRASTON; 00176 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00177 break; 00178 00179 case IDC_CONTRAST_BUTTON: 00180 if (DialogBoxParam(hApplet, 00181 MAKEINTRESOURCE(IDD_CONTRASTOPTIONS), 00182 hwndDlg, 00183 (DLGPROC)HighContrastDlgProc, 00184 (LPARAM)pGlobalData)) 00185 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00186 break; 00187 00188 default: 00189 break; 00190 } 00191 break; 00192 00193 case WM_HSCROLL: 00194 switch (GetWindowLongPtr((HWND) lParam, GWL_ID)) 00195 { 00196 case IDC_CURSOR_BLINK_TRACK: 00197 i = SendDlgItemMessage(hwndDlg, IDC_CURSOR_BLINK_TRACK, TBM_GETPOS, 0, 0); 00198 pGlobalData->uCaretBlinkTime = (12 - (UINT)i) * 100; 00199 KillTimer(hwndDlg, ID_BLINK_TIMER); 00200 SetTimer(hwndDlg, ID_BLINK_TIMER, pGlobalData->uCaretBlinkTime, NULL); 00201 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00202 break; 00203 00204 case IDC_CURSOR_WIDTH_TRACK: 00205 i = SendDlgItemMessage(hwndDlg, IDC_CURSOR_WIDTH_TRACK, TBM_GETPOS, 0, 0); 00206 pGlobalData->uCaretWidth = (UINT)i + 1; 00207 pGlobalData->rcCaret.right = pGlobalData->rcCaret.left + pGlobalData->uCaretWidth; 00208 if (pGlobalData->fShowCaret) 00209 { 00210 HDC hDC = GetDC(hwndDlg); 00211 HBRUSH hBrush = GetSysColorBrush(COLOR_BTNTEXT); 00212 FillRect(hDC, &pGlobalData->rcCaret, hBrush); 00213 DeleteObject(hBrush); 00214 ReleaseDC(hwndDlg, hDC); 00215 } 00216 else 00217 { 00218 InvalidateRect(hwndDlg, &pGlobalData->rcOldCaret, TRUE); 00219 } 00220 PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 00221 break; 00222 } 00223 break; 00224 00225 case WM_TIMER: 00226 if (wParam == ID_BLINK_TIMER) 00227 { 00228 if (pGlobalData->fShowCaret) 00229 { 00230 HDC hDC = GetDC(hwndDlg); 00231 HBRUSH hBrush = GetSysColorBrush(COLOR_BTNTEXT); 00232 FillRect(hDC, &pGlobalData->rcCaret, hBrush); 00233 DeleteObject(hBrush); 00234 ReleaseDC(hwndDlg, hDC); 00235 } 00236 else 00237 { 00238 InvalidateRect(hwndDlg, &pGlobalData->rcOldCaret, TRUE); 00239 } 00240 00241 pGlobalData->fShowCaret = !pGlobalData->fShowCaret; 00242 } 00243 break; 00244 00245 case WM_NOTIFY: 00246 lppsn = (LPPSHNOTIFY)lParam; 00247 if (lppsn->hdr.code == PSN_APPLY) 00248 { 00249 SetCaretBlinkTime(pGlobalData->uCaretBlinkTime); 00250 SystemParametersInfo(SPI_SETCARETWIDTH, 00251 0, 00252 IntToPtr(pGlobalData->uCaretWidth), 00253 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE /*0*/); 00254 SystemParametersInfo(SPI_SETHIGHCONTRAST, 00255 sizeof(HIGHCONTRAST), 00256 &pGlobalData->highContrast, 00257 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE /*0*/); 00258 return TRUE; 00259 } 00260 break; 00261 00262 case WM_DESTROY: 00263 KillTimer(hwndDlg, ID_BLINK_TIMER); 00264 break; 00265 } 00266 00267 return FALSE; 00268 } Generated on Fri May 25 2012 04:14:56 for ReactOS by
1.7.6.1
|