1 /* $Id: display.c 29112 2007-09-19 21:31:49Z ekohl $
3 * PROJECT: ReactOS Accessibility Control Panel
4 * LICENSE: GPL - See COPYING in the top level directory
5 * FILE: dll/cpl/access/display.c
6 * PURPOSE: Display-related accessibility settings
7 * COPYRIGHT: Copyright 2004 Johannes Anderwald (j_anderw@sbox.tugraz.at)
8 * Copyright 2007 Eric Kohl
20 #define ID_BLINK_TIMER 346
24 FillColorSchemeComboBox(HWND hwnd
)
33 lError
= RegCreateKeyEx(HKEY_CURRENT_USER
,
34 _T("Control Panel\\Appearance\\Schemes"),
37 REG_OPTION_NON_VOLATILE
,
38 KEY_ENUMERATE_SUB_KEYS
| KEY_EXECUTE
| KEY_QUERY_VALUE
,
42 if (lError
!= ERROR_SUCCESS
)
48 lError
= RegEnumValue(hKey
,
51 &dwLength
, NULL
, NULL
, NULL
, NULL
);
52 if (lError
== ERROR_NO_MORE_ITEMS
)
66 HighContrastDlgProc(HWND hwndDlg
,
71 PGLOBAL_DATA pGlobalData
;
73 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
78 pGlobalData
= (PGLOBAL_DATA
)lParam
;
79 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
81 CheckDlgButton(hwndDlg
,
82 IDC_CONTRAST_ACTIVATE_CHECK
,
83 pGlobalData
->highContrast
.dwFlags
& HCF_HOTKEYACTIVE
? BST_CHECKED
: BST_UNCHECKED
);
85 FillColorSchemeComboBox(GetDlgItem(hwndDlg
, IDC_CONTRAST_COMBO
));
87 SendDlgItemMessage(hwndDlg
,
91 (LPARAM
)pGlobalData
->highContrast
.lpszDefaultScheme
);
95 switch (LOWORD(wParam
))
97 case IDC_CONTRAST_ACTIVATE_CHECK
:
98 pGlobalData
->highContrast
.dwFlags
^= HCF_HOTKEYACTIVE
;
101 case IDC_CONTRAST_COMBO
:
102 if (HIWORD(wParam
) == CBN_SELCHANGE
)
106 nSel
= SendDlgItemMessage(hwndDlg
, IDC_CONTRAST_COMBO
,
108 SendDlgItemMessage(hwndDlg
, IDC_CONTRAST_COMBO
,
110 (LPARAM
)pGlobalData
->highContrast
.lpszDefaultScheme
);
115 EndDialog(hwndDlg
, TRUE
);
119 EndDialog(hwndDlg
, FALSE
);
132 /* Property page dialog callback */
134 DisplayPageProc(HWND hwndDlg
,
139 PGLOBAL_DATA pGlobalData
;
143 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
148 pGlobalData
= (PGLOBAL_DATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
149 if (pGlobalData
== NULL
)
152 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
154 pGlobalData
->fShowCaret
= TRUE
;
155 GetWindowRect(GetDlgItem(hwndDlg
, IDC_CURSOR_WIDTH_TEXT
), &pGlobalData
->rcCaret
);
156 ScreenToClient(hwndDlg
, (LPPOINT
)&pGlobalData
->rcCaret
.left
);
157 ScreenToClient(hwndDlg
, (LPPOINT
)&pGlobalData
->rcCaret
.right
);
158 CopyRect(&pGlobalData
->rcOldCaret
, &pGlobalData
->rcCaret
);
160 pGlobalData
->rcCaret
.right
= pGlobalData
->rcCaret
.left
+ pGlobalData
->uCaretWidth
;
162 /* Set the checkbox */
163 CheckDlgButton(hwndDlg
,
165 pGlobalData
->highContrast
.dwFlags
& HCF_HIGHCONTRASTON
? BST_CHECKED
: BST_UNCHECKED
);
167 SendDlgItemMessage(hwndDlg
, IDC_CURSOR_BLINK_TRACK
, TBM_SETRANGE
, (WPARAM
)TRUE
, (LPARAM
)MAKELONG(0, 10));
168 SendDlgItemMessage(hwndDlg
, IDC_CURSOR_BLINK_TRACK
, TBM_SETPOS
, (WPARAM
)TRUE
, (LPARAM
)(12 - (pGlobalData
->uCaretBlinkTime
/ 100)));
170 SendDlgItemMessage(hwndDlg
, IDC_CURSOR_WIDTH_TRACK
, TBM_SETRANGE
, (WPARAM
)TRUE
, (LPARAM
)MAKELONG(0, 19));
171 SendDlgItemMessage(hwndDlg
, IDC_CURSOR_WIDTH_TRACK
, TBM_SETPOS
, (WPARAM
)TRUE
, (LPARAM
)(pGlobalData
->uCaretWidth
- 1));
173 /* Start the blink timer */
174 SetTimer(hwndDlg
, ID_BLINK_TIMER
, pGlobalData
->uCaretBlinkTime
, NULL
);
178 switch (LOWORD(wParam
))
180 case IDC_CONTRAST_BOX
:
181 pGlobalData
->highContrast
.dwFlags
^= HCF_HIGHCONTRASTON
;
182 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
185 case IDC_CONTRAST_BUTTON
:
186 if (DialogBoxParam(hApplet
,
187 MAKEINTRESOURCE(IDD_CONTRASTOPTIONS
),
189 (DLGPROC
)HighContrastDlgProc
,
190 (LPARAM
)pGlobalData
))
191 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
200 switch (GetWindowLong((HWND
) lParam
, GWL_ID
))
202 case IDC_CURSOR_BLINK_TRACK
:
203 i
= SendDlgItemMessage(hwndDlg
, IDC_CURSOR_BLINK_TRACK
, TBM_GETPOS
, 0, 0);
204 pGlobalData
->uCaretBlinkTime
= (12 - (UINT
)i
) * 100;
205 KillTimer(hwndDlg
, ID_BLINK_TIMER
);
206 SetTimer(hwndDlg
, ID_BLINK_TIMER
, pGlobalData
->uCaretBlinkTime
, NULL
);
207 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
210 case IDC_CURSOR_WIDTH_TRACK
:
211 i
= SendDlgItemMessage(hwndDlg
, IDC_CURSOR_WIDTH_TRACK
, TBM_GETPOS
, 0, 0);
212 pGlobalData
->uCaretWidth
= (UINT
)i
+ 1;
213 pGlobalData
->rcCaret
.right
= pGlobalData
->rcCaret
.left
+ pGlobalData
->uCaretWidth
;
214 if (pGlobalData
->fShowCaret
)
216 HDC hDC
= GetDC(hwndDlg
);
217 HBRUSH hBrush
= GetSysColorBrush(COLOR_BTNTEXT
);
218 FillRect(hDC
, &pGlobalData
->rcCaret
, hBrush
);
219 DeleteObject(hBrush
);
220 ReleaseDC(hwndDlg
, hDC
);
224 InvalidateRect(hwndDlg
, &pGlobalData
->rcOldCaret
, TRUE
);
226 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
232 if (wParam
== ID_BLINK_TIMER
)
234 if (pGlobalData
->fShowCaret
)
236 HDC hDC
= GetDC(hwndDlg
);
237 HBRUSH hBrush
= GetSysColorBrush(COLOR_BTNTEXT
);
238 FillRect(hDC
, &pGlobalData
->rcCaret
, hBrush
);
239 DeleteObject(hBrush
);
240 ReleaseDC(hwndDlg
, hDC
);
244 InvalidateRect(hwndDlg
, &pGlobalData
->rcOldCaret
, TRUE
);
247 pGlobalData
->fShowCaret
= !pGlobalData
->fShowCaret
;
252 lppsn
= (LPPSHNOTIFY
)lParam
;
253 if (lppsn
->hdr
.code
== PSN_APPLY
)
255 SetCaretBlinkTime(pGlobalData
->uCaretBlinkTime
);
256 SystemParametersInfo(SPI_SETCARETWIDTH
,
258 IntToPtr(pGlobalData
->uCaretWidth
),
259 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
260 SystemParametersInfo(SPI_SETHIGHCONTRAST
,
261 sizeof(HIGHCONTRAST
),
262 &pGlobalData
->highContrast
,
263 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
269 KillTimer(hwndDlg
, ID_BLINK_TIMER
);