ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

display.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.