2 * PROJECT: ReactOS Accessibility Control Panel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/cpl/access/display.c
5 * PURPOSE: Display-related accessibility settings
6 * COPYRIGHT: Copyright 2004 Johannes Anderwald (johannes.anderwald@reactos.org)
7 * Copyright 2007 Eric Kohl
14 #define ID_BLINK_TIMER 346
17 FillColorSchemeComboBox(HWND hwnd
)
26 lError
= RegCreateKeyEx(HKEY_CURRENT_USER
,
27 _T("Control Panel\\Appearance\\Schemes"),
30 REG_OPTION_NON_VOLATILE
,
31 KEY_ENUMERATE_SUB_KEYS
| KEY_EXECUTE
| KEY_QUERY_VALUE
,
35 if (lError
!= ERROR_SUCCESS
)
41 lError
= RegEnumValue(hKey
,
44 &dwLength
, NULL
, NULL
, NULL
, NULL
);
45 if (lError
== ERROR_NO_MORE_ITEMS
)
59 HighContrastDlgProc(HWND hwndDlg
,
64 PGLOBAL_DATA pGlobalData
;
66 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
71 pGlobalData
= (PGLOBAL_DATA
)lParam
;
72 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
74 CheckDlgButton(hwndDlg
,
75 IDC_CONTRAST_ACTIVATE_CHECK
,
76 pGlobalData
->highContrast
.dwFlags
& HCF_HOTKEYACTIVE
? BST_CHECKED
: BST_UNCHECKED
);
78 FillColorSchemeComboBox(GetDlgItem(hwndDlg
, IDC_CONTRAST_COMBO
));
80 SendDlgItemMessage(hwndDlg
,
84 (LPARAM
)pGlobalData
->highContrast
.lpszDefaultScheme
);
88 switch (LOWORD(wParam
))
90 case IDC_CONTRAST_ACTIVATE_CHECK
:
91 pGlobalData
->highContrast
.dwFlags
^= HCF_HOTKEYACTIVE
;
94 case IDC_CONTRAST_COMBO
:
95 if (HIWORD(wParam
) == CBN_SELCHANGE
)
99 nSel
= SendDlgItemMessage(hwndDlg
, IDC_CONTRAST_COMBO
,
101 SendDlgItemMessage(hwndDlg
, IDC_CONTRAST_COMBO
,
103 (LPARAM
)pGlobalData
->highContrast
.lpszDefaultScheme
);
108 EndDialog(hwndDlg
, TRUE
);
112 EndDialog(hwndDlg
, FALSE
);
125 /* Property page dialog callback */
127 DisplayPageProc(HWND hwndDlg
,
132 PGLOBAL_DATA pGlobalData
;
136 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
141 pGlobalData
= (PGLOBAL_DATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
142 if (pGlobalData
== NULL
)
145 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
147 pGlobalData
->fShowCaret
= TRUE
;
148 GetWindowRect(GetDlgItem(hwndDlg
, IDC_CURSOR_WIDTH_TEXT
), &pGlobalData
->rcCaret
);
149 ScreenToClient(hwndDlg
, (LPPOINT
)&pGlobalData
->rcCaret
.left
);
150 ScreenToClient(hwndDlg
, (LPPOINT
)&pGlobalData
->rcCaret
.right
);
151 CopyRect(&pGlobalData
->rcOldCaret
, &pGlobalData
->rcCaret
);
153 pGlobalData
->rcCaret
.right
= pGlobalData
->rcCaret
.left
+ pGlobalData
->uCaretWidth
;
155 /* Set the checkbox */
156 CheckDlgButton(hwndDlg
,
158 pGlobalData
->highContrast
.dwFlags
& HCF_HIGHCONTRASTON
? BST_CHECKED
: BST_UNCHECKED
);
160 SendDlgItemMessage(hwndDlg
, IDC_CURSOR_BLINK_TRACK
, TBM_SETRANGE
, (WPARAM
)TRUE
, (LPARAM
)MAKELONG(0, 10));
161 SendDlgItemMessage(hwndDlg
, IDC_CURSOR_BLINK_TRACK
, TBM_SETPOS
, (WPARAM
)TRUE
, (LPARAM
)(12 - (pGlobalData
->uCaretBlinkTime
/ 100)));
163 SendDlgItemMessage(hwndDlg
, IDC_CURSOR_WIDTH_TRACK
, TBM_SETRANGE
, (WPARAM
)TRUE
, (LPARAM
)MAKELONG(0, 19));
164 SendDlgItemMessage(hwndDlg
, IDC_CURSOR_WIDTH_TRACK
, TBM_SETPOS
, (WPARAM
)TRUE
, (LPARAM
)(pGlobalData
->uCaretWidth
- 1));
166 /* Start the blink timer */
167 SetTimer(hwndDlg
, ID_BLINK_TIMER
, pGlobalData
->uCaretBlinkTime
, NULL
);
171 switch (LOWORD(wParam
))
173 case IDC_CONTRAST_BOX
:
174 pGlobalData
->highContrast
.dwFlags
^= HCF_HIGHCONTRASTON
;
175 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
178 case IDC_CONTRAST_BUTTON
:
179 if (DialogBoxParam(hApplet
,
180 MAKEINTRESOURCE(IDD_CONTRASTOPTIONS
),
182 (DLGPROC
)HighContrastDlgProc
,
183 (LPARAM
)pGlobalData
))
184 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
193 switch (GetWindowLongPtr((HWND
) lParam
, GWL_ID
))
195 case IDC_CURSOR_BLINK_TRACK
:
196 i
= SendDlgItemMessage(hwndDlg
, IDC_CURSOR_BLINK_TRACK
, TBM_GETPOS
, 0, 0);
197 pGlobalData
->uCaretBlinkTime
= (12 - (UINT
)i
) * 100;
198 KillTimer(hwndDlg
, ID_BLINK_TIMER
);
199 SetTimer(hwndDlg
, ID_BLINK_TIMER
, pGlobalData
->uCaretBlinkTime
, NULL
);
200 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
203 case IDC_CURSOR_WIDTH_TRACK
:
204 i
= SendDlgItemMessage(hwndDlg
, IDC_CURSOR_WIDTH_TRACK
, TBM_GETPOS
, 0, 0);
205 pGlobalData
->uCaretWidth
= (UINT
)i
+ 1;
206 pGlobalData
->rcCaret
.right
= pGlobalData
->rcCaret
.left
+ pGlobalData
->uCaretWidth
;
207 if (pGlobalData
->fShowCaret
)
209 HDC hDC
= GetDC(hwndDlg
);
210 HBRUSH hBrush
= GetSysColorBrush(COLOR_BTNTEXT
);
211 FillRect(hDC
, &pGlobalData
->rcCaret
, hBrush
);
212 DeleteObject(hBrush
);
213 ReleaseDC(hwndDlg
, hDC
);
217 InvalidateRect(hwndDlg
, &pGlobalData
->rcOldCaret
, TRUE
);
219 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
225 if (wParam
== ID_BLINK_TIMER
)
227 if (pGlobalData
->fShowCaret
)
229 HDC hDC
= GetDC(hwndDlg
);
230 HBRUSH hBrush
= GetSysColorBrush(COLOR_BTNTEXT
);
231 FillRect(hDC
, &pGlobalData
->rcCaret
, hBrush
);
232 DeleteObject(hBrush
);
233 ReleaseDC(hwndDlg
, hDC
);
237 InvalidateRect(hwndDlg
, &pGlobalData
->rcOldCaret
, TRUE
);
240 pGlobalData
->fShowCaret
= !pGlobalData
->fShowCaret
;
245 lppsn
= (LPPSHNOTIFY
)lParam
;
246 if (lppsn
->hdr
.code
== PSN_APPLY
)
248 SetCaretBlinkTime(pGlobalData
->uCaretBlinkTime
);
249 SystemParametersInfo(SPI_SETCARETWIDTH
,
251 IntToPtr(pGlobalData
->uCaretWidth
),
252 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
253 SystemParametersInfo(SPI_SETHIGHCONTRAST
,
254 sizeof(HIGHCONTRAST
),
255 &pGlobalData
->highContrast
,
256 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
262 KillTimer(hwndDlg
, ID_BLINK_TIMER
);