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
14 #define ID_BLINK_TIMER 346
18 FillColorSchemeComboBox(HWND hwnd
)
27 lError
= RegCreateKeyEx(HKEY_CURRENT_USER
,
28 _T("Control Panel\\Appearance\\Schemes"),
31 REG_OPTION_NON_VOLATILE
,
32 KEY_ENUMERATE_SUB_KEYS
| KEY_EXECUTE
| KEY_QUERY_VALUE
,
36 if (lError
!= ERROR_SUCCESS
)
42 lError
= RegEnumValue(hKey
,
45 &dwLength
, NULL
, NULL
, NULL
, NULL
);
46 if (lError
== ERROR_NO_MORE_ITEMS
)
60 HighContrastDlgProc(HWND hwndDlg
,
65 PGLOBAL_DATA pGlobalData
;
67 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
72 pGlobalData
= (PGLOBAL_DATA
)lParam
;
73 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
75 CheckDlgButton(hwndDlg
,
76 IDC_CONTRAST_ACTIVATE_CHECK
,
77 pGlobalData
->highContrast
.dwFlags
& HCF_HOTKEYACTIVE
? BST_CHECKED
: BST_UNCHECKED
);
79 FillColorSchemeComboBox(GetDlgItem(hwndDlg
, IDC_CONTRAST_COMBO
));
81 SendDlgItemMessage(hwndDlg
,
85 (LPARAM
)pGlobalData
->highContrast
.lpszDefaultScheme
);
89 switch (LOWORD(wParam
))
91 case IDC_CONTRAST_ACTIVATE_CHECK
:
92 pGlobalData
->highContrast
.dwFlags
^= HCF_HOTKEYACTIVE
;
95 case IDC_CONTRAST_COMBO
:
96 if (HIWORD(wParam
) == CBN_SELCHANGE
)
100 nSel
= SendDlgItemMessage(hwndDlg
, IDC_CONTRAST_COMBO
,
102 SendDlgItemMessage(hwndDlg
, IDC_CONTRAST_COMBO
,
104 (LPARAM
)pGlobalData
->highContrast
.lpszDefaultScheme
);
109 EndDialog(hwndDlg
, TRUE
);
113 EndDialog(hwndDlg
, FALSE
);
126 /* Property page dialog callback */
128 DisplayPageProc(HWND hwndDlg
,
133 PGLOBAL_DATA pGlobalData
;
137 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
142 pGlobalData
= (PGLOBAL_DATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
143 if (pGlobalData
== NULL
)
146 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
148 pGlobalData
->fShowCaret
= TRUE
;
149 GetWindowRect(GetDlgItem(hwndDlg
, IDC_CURSOR_WIDTH_TEXT
), &pGlobalData
->rcCaret
);
150 ScreenToClient(hwndDlg
, (LPPOINT
)&pGlobalData
->rcCaret
.left
);
151 ScreenToClient(hwndDlg
, (LPPOINT
)&pGlobalData
->rcCaret
.right
);
152 CopyRect(&pGlobalData
->rcOldCaret
, &pGlobalData
->rcCaret
);
154 pGlobalData
->rcCaret
.right
= pGlobalData
->rcCaret
.left
+ pGlobalData
->uCaretWidth
;
156 /* Set the checkbox */
157 CheckDlgButton(hwndDlg
,
159 pGlobalData
->highContrast
.dwFlags
& HCF_HIGHCONTRASTON
? BST_CHECKED
: BST_UNCHECKED
);
161 SendDlgItemMessage(hwndDlg
, IDC_CURSOR_BLINK_TRACK
, TBM_SETRANGE
, (WPARAM
)TRUE
, (LPARAM
)MAKELONG(0, 10));
162 SendDlgItemMessage(hwndDlg
, IDC_CURSOR_BLINK_TRACK
, TBM_SETPOS
, (WPARAM
)TRUE
, (LPARAM
)(12 - (pGlobalData
->uCaretBlinkTime
/ 100)));
164 SendDlgItemMessage(hwndDlg
, IDC_CURSOR_WIDTH_TRACK
, TBM_SETRANGE
, (WPARAM
)TRUE
, (LPARAM
)MAKELONG(0, 19));
165 SendDlgItemMessage(hwndDlg
, IDC_CURSOR_WIDTH_TRACK
, TBM_SETPOS
, (WPARAM
)TRUE
, (LPARAM
)(pGlobalData
->uCaretWidth
- 1));
167 /* Start the blink timer */
168 SetTimer(hwndDlg
, ID_BLINK_TIMER
, pGlobalData
->uCaretBlinkTime
, NULL
);
172 switch (LOWORD(wParam
))
174 case IDC_CONTRAST_BOX
:
175 pGlobalData
->highContrast
.dwFlags
^= HCF_HIGHCONTRASTON
;
176 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
179 case IDC_CONTRAST_BUTTON
:
180 if (DialogBoxParam(hApplet
,
181 MAKEINTRESOURCE(IDD_CONTRASTOPTIONS
),
183 (DLGPROC
)HighContrastDlgProc
,
184 (LPARAM
)pGlobalData
))
185 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
194 switch (GetWindowLongPtr((HWND
) lParam
, GWL_ID
))
196 case IDC_CURSOR_BLINK_TRACK
:
197 i
= SendDlgItemMessage(hwndDlg
, IDC_CURSOR_BLINK_TRACK
, TBM_GETPOS
, 0, 0);
198 pGlobalData
->uCaretBlinkTime
= (12 - (UINT
)i
) * 100;
199 KillTimer(hwndDlg
, ID_BLINK_TIMER
);
200 SetTimer(hwndDlg
, ID_BLINK_TIMER
, pGlobalData
->uCaretBlinkTime
, NULL
);
201 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
204 case IDC_CURSOR_WIDTH_TRACK
:
205 i
= SendDlgItemMessage(hwndDlg
, IDC_CURSOR_WIDTH_TRACK
, TBM_GETPOS
, 0, 0);
206 pGlobalData
->uCaretWidth
= (UINT
)i
+ 1;
207 pGlobalData
->rcCaret
.right
= pGlobalData
->rcCaret
.left
+ pGlobalData
->uCaretWidth
;
208 if (pGlobalData
->fShowCaret
)
210 HDC hDC
= GetDC(hwndDlg
);
211 HBRUSH hBrush
= GetSysColorBrush(COLOR_BTNTEXT
);
212 FillRect(hDC
, &pGlobalData
->rcCaret
, hBrush
);
213 DeleteObject(hBrush
);
214 ReleaseDC(hwndDlg
, hDC
);
218 InvalidateRect(hwndDlg
, &pGlobalData
->rcOldCaret
, TRUE
);
220 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
226 if (wParam
== ID_BLINK_TIMER
)
228 if (pGlobalData
->fShowCaret
)
230 HDC hDC
= GetDC(hwndDlg
);
231 HBRUSH hBrush
= GetSysColorBrush(COLOR_BTNTEXT
);
232 FillRect(hDC
, &pGlobalData
->rcCaret
, hBrush
);
233 DeleteObject(hBrush
);
234 ReleaseDC(hwndDlg
, hDC
);
238 InvalidateRect(hwndDlg
, &pGlobalData
->rcOldCaret
, TRUE
);
241 pGlobalData
->fShowCaret
= !pGlobalData
->fShowCaret
;
246 lppsn
= (LPPSHNOTIFY
)lParam
;
247 if (lppsn
->hdr
.code
== PSN_APPLY
)
249 SetCaretBlinkTime(pGlobalData
->uCaretBlinkTime
);
250 SystemParametersInfo(SPI_SETCARETWIDTH
,
252 IntToPtr(pGlobalData
->uCaretWidth
),
253 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
254 SystemParametersInfo(SPI_SETHIGHCONTRAST
,
255 sizeof(HIGHCONTRAST
),
256 &pGlobalData
->highContrast
,
257 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);
263 KillTimer(hwndDlg
, ID_BLINK_TIMER
);