Author: ekohl Date: Fri Apr 27 17:54:19 2007 New Revision: 26540
URL: http://svn.reactos.org/svn/reactos?rev=26540&view=rev Log: Add code that applies the currently selected cursor scheme.
Modified: trunk/reactos/dll/cpl/main/mouse.c
Modified: trunk/reactos/dll/cpl/main/mouse.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/main/mouse.c?rev=26... ============================================================================== --- trunk/reactos/dll/cpl/main/mouse.c (original) +++ trunk/reactos/dll/cpl/main/mouse.c Fri Apr 27 17:54:19 2007 @@ -122,7 +122,7 @@ { UINT uStringId; UINT uDefaultCursorId; - LPWSTR lpValueName; + LPTSTR lpValueName; HCURSOR hCursor; TCHAR szCursorName[MAX_PATH]; TCHAR szCursorPath[MAX_PATH]; @@ -1030,7 +1030,68 @@ static BOOL ApplyCursorScheme(HWND hwndDlg) { - /* FIXME: Apply the cursor scheme */ + TCHAR szSchemeName[MAX_PATH]; + TCHAR szSystemScheme[MAX_PATH]; + LPTSTR lpSchemeData; + DWORD dwNameLength; + DWORD dwSchemeSource; + UINT index, i; + HKEY hCursorKey; + INT nSel; + + nSel = SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETCURSEL, 0, 0); + if (nSel == CB_ERR) + return FALSE; + + lpSchemeData = (LPTSTR)SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETITEMDATA, nSel, 0); + if (lpSchemeData == NULL) + { + /* "None" cursor scheme */ + dwSchemeSource = 0; + szSchemeName[0] = 0; + dwNameLength = 0; + } + else + { + SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETLBTEXT, nSel, (LPARAM)szSchemeName); + LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH); + + if (_tcsstr(szSchemeName, szSystemScheme)) + { + /* System scheme */ + dwSchemeSource = 2; + szSchemeName[_tcslen(szSchemeName) - _tcslen(szSystemScheme) - 1] = 0; + } + else + { + /* User scheme */ + dwSchemeSource = 1; + } + + dwNameLength = (_tcslen(szSchemeName) + 1) * sizeof(TCHAR); + } + + if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Control Panel\Cursors"), 0, + KEY_READ | KEY_SET_VALUE, &hCursorKey) != ERROR_SUCCESS) + return FALSE; + + RegSetValueEx(hCursorKey, NULL, 0, REG_SZ, + (LPBYTE)szSchemeName, dwNameLength); + + RegSetValueEx(hCursorKey, _T("Scheme Source"), 0, REG_DWORD, + (LPBYTE)&dwSchemeSource, sizeof(DWORD)); + + for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++) + { + RegSetValueEx(hCursorKey, g_CursorData[i].lpValueName, 0, + REG_EXPAND_SZ, (LPBYTE)g_CursorData[i].szCursorPath, + (_tcslen(g_CursorData[i].szCursorPath) + 1) * sizeof(TCHAR)); + } + + RegCloseKey(hCursorKey); + + /* Force the system to reload its cursors */ + SystemParametersInfo(SPI_SETCURSORS, 0, NULL, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
return TRUE; }