ReactOS 0.4.15-dev-8207-gd73a838
settings.c
Go to the documentation of this file.
1/*
2 * Star field screensaver
3 *
4 * Copyright 2011 Carlo Bramini
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#define WIN32_LEAN_AND_MEAN
22#include <windows.h>
23#include <tchar.h>
24#include <commctrl.h>
25#include <shellapi.h>
26
27#include "resource.h"
28#include "settings.h"
29
30#define SIZEOF(_v) (sizeof(_v) / sizeof(*_v))
31
32// Options for the starfield
34
35// Factory default settings.
36static const SSSTARS FactoryDefaults = {
38 20,
40
41 TRUE,
42 TRUE,
43 TRUE,
44 TRUE
45};
46
47static const DWORD RotoStrings[] = {
51};
52
53static DWORD QueryDWORD(HKEY hKey, LPCTSTR pszValueName, DWORD Default)
54{
55 DWORD dwData, dwType, cbData;
56 LONG lRes;
57
58 dwType = REG_DWORD;
59 cbData = sizeof(DWORD);
60
61 lRes = RegQueryValueEx(
62 hKey,
63 pszValueName,
64 NULL,
65 &dwType,
66 (LPBYTE)&dwData,
67 &cbData);
68
69 if (lRes != ERROR_SUCCESS || dwType != REG_DWORD)
70 return Default;
71
72 return dwData;
73}
74
75static void SaveDWORD(HKEY hKey, LPCTSTR pszValueName, DWORD dwValue)
76{
77 RegSetValueEx(hKey, pszValueName, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(dwValue));
78}
79
80
81void LoadSettings(void)
82{
83 HKEY hKey;
84 LONG lRes;
85
87
88 lRes = RegCreateKeyEx(
90 _T("Software\\Microsoft\\ScreenSavers\\Ssstars"),
91 0,
92 _T(""),
93 0,
95 NULL,
96 &hKey,
97 NULL);
98
99 if (lRes != ERROR_SUCCESS)
100 return;
101
102 Settings.uiNumStars = QueryDWORD(hKey, _T("NumberOfStars"), Settings.uiNumStars);
103 Settings.uiSpeed = QueryDWORD(hKey, _T("Speed"), Settings.uiSpeed);
104 Settings.uiRotation = QueryDWORD(hKey, _T("TypeOfRotation"), Settings.uiRotation);
105
106 Settings.bDoBlending = QueryDWORD(hKey, _T("DoBlending"), Settings.bDoBlending);
107 Settings.bFinePerspective = QueryDWORD(hKey, _T("FinePerspective"), Settings.bFinePerspective);
108 Settings.bEnableFiltering = QueryDWORD(hKey, _T("EnableFiltering"), Settings.bEnableFiltering);
109 Settings.bSmoothShading = QueryDWORD(hKey, _T("SmoothShading"), Settings.bSmoothShading);
110
111 // Check the number of stars to be in range
112 if (Settings.uiNumStars < MIN_STARS)
113 Settings.uiNumStars = MIN_STARS;
114 else
115 if (Settings.uiNumStars > MAX_STARS)
116 Settings.uiNumStars = MAX_STARS;
117
118 // Check the speed to be in range
119 if (Settings.uiSpeed < MIN_SPEED)
120 Settings.uiSpeed = MIN_SPEED;
121 else
122 if (Settings.uiSpeed > MAX_SPEED)
123 Settings.uiSpeed = MAX_SPEED;
124
125 // Check type of rotation to be in range
126 if (Settings.uiRotation != ROTATION_NONE &&
127 Settings.uiRotation != ROTATION_LINEAR &&
128 Settings.uiRotation != ROTATION_PERIODIC)
129 Settings.uiRotation = ROTATION_PERIODIC;
130
132}
133
134void SaveSettings(void)
135{
136 HKEY hKey;
137 LONG lRes;
138
139 lRes = RegCreateKeyEx(
141 _T("Software\\Microsoft\\ScreenSavers\\Ssstars"),
142 0,
143 _T(""),
144 0,
145 KEY_WRITE,
146 NULL,
147 &hKey,
148 NULL);
149
150 if (lRes != ERROR_SUCCESS)
151 return;
152
153 SaveDWORD(hKey, _T("NumberOfStars"), Settings.uiNumStars);
154 SaveDWORD(hKey, _T("Speed"), Settings.uiSpeed);
155 SaveDWORD(hKey, _T("TypeOfRotation"), Settings.uiRotation);
156
157 SaveDWORD(hKey, _T("DoBlending"), Settings.bDoBlending);
158 SaveDWORD(hKey, _T("FinePerspective"), Settings.bFinePerspective);
159 SaveDWORD(hKey, _T("EnableFiltering"), Settings.bEnableFiltering);
160 SaveDWORD(hKey, _T("SmoothShading"), Settings.bSmoothShading);
161
163}
164
166{
167 TCHAR Strings[256];
169 UINT x, gap;
170 LOGFONT lf;
171 HFONT hFont;
172 HBITMAP hCosmos;
173 HDC hDC, hMemDC;
174 HGDIOBJ hOldBmp, hOldFnt;
175 SIZE sizeReactOS;
176 SIZE sizeStarfield;
177 BITMAP bm;
178
180
182
184
185 for (x = 0; x < ROTATION_ITEMS; x++)
186 {
189 }
190
192
193 hDC = GetDC(hWnd);
194 hMemDC = CreateCompatibleDC(hDC);
195
196 // Create the font for the title
197 ZeroMemory(&lf, sizeof(lf));
198
199 lf.lfWeight = FW_THIN;
202 lf.lfHeight = 36;
203 _tcscpy(lf.lfFaceName, _T("Tahoma"));
204
206
207 hOldBmp = SelectObject(hMemDC, hCosmos);
208 hOldFnt = SelectObject(hMemDC, hFont);
209
210 SetBkMode(hMemDC, TRANSPARENT);
211 SetTextColor(hMemDC, RGB(0xFF, 0xFF, 0xFF));
212
214
215 GetTextExtentPoint32(hMemDC, _T("ReactOS"), 7, &sizeReactOS);
216 GetTextExtentPoint32(hMemDC, Strings, x, &sizeStarfield);
217
218 GetObject(hCosmos, sizeof(BITMAP), &bm);
219
220 gap = bm.bmHeight - sizeReactOS.cy - sizeStarfield.cy;
221
222 TextOut(hMemDC, 16, gap * 2 / 5, _T("ReactOS"), 7);
223 TextOut(hMemDC, 16, gap * 3 / 5 + sizeReactOS.cy, Strings, x);
224
225 SelectObject(hMemDC, hOldBmp);
226 SelectObject(hMemDC, hOldFnt);
227
229
230 DeleteDC(hMemDC);
232
234}
235
237{
240
243
245
250}
251
253{
256
259
261
266}
267
269{
271 HICON hIcon;
272 TCHAR szAppName[256];
273 TCHAR szAuthor[256];
274 TCHAR szLicense[1024];
275
277
279
281 LoadString(hInstance, IDS_AUTHOR, szAuthor, SIZEOF(szAuthor));
282 LoadString(hInstance, IDS_LICENSE, szLicense, SIZEOF(szLicense));
283
284 _tcscat(szAppName, _T("#"));
285 _tcscat(szAppName, szAuthor);
286
287 ShellAbout(hWnd, szAppName, szLicense, hIcon);
288
289 return TRUE;
290}
291
292//
293// Dialogbox procedure for Configuration window
294//
296{
297 switch (uMsg) {
298 case WM_INITDIALOG:
299 LoadSettings();
300 SetupControls(hDlg);
301 ApplySettings(hDlg);
302 return TRUE;
303
304 case WM_COMMAND:
305 switch (LOWORD( wParam )) {
306
307 case IDOK:
308 // Write configuration
309 SaveSettings();
310
311 // Fall down...
312 case IDCANCEL:
313 EndDialog( hDlg, LOWORD( wParam ));
314 return TRUE;
315
316 case IDC_BUTTON_ABOUT:
317 return OnCommandAbout(hDlg);
318 }
319
320 case WM_HSCROLL:
321 ReadSettings(hDlg);
322 return TRUE;
323
324 }
325
326 return FALSE;
327}
328
330{
332
333 return TRUE;
334}
335
static HDC hDC
Definition: 3dtext.c:33
#define IDS_AUTHOR
Definition: resource.h:12
#define IDS_LICENSE
Definition: resource.h:28
void SaveSettings(void)
Definition: settings.c:115
void LoadSettings(void)
Definition: settings.c:53
HWND hWnd
Definition: settings.c:17
#define IDS_DESCRIPTION
Definition: resource.h:4
HFONT hFont
Definition: main.c:53
#define RegCloseKey(hKey)
Definition: registry.h:49
HINSTANCE hInstance
Definition: charmap.c:19
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
VOID WINAPI InitCommonControls(void)
Definition: commctrl.c:863
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static const WCHAR Strings[]
Definition: reg.c:35
#define CALLBACK
Definition: compat.h:35
#define RGB(r, g, b)
Definition: precomp.h:71
HINSTANCE hInst
Definition: dxdiag.c:13
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
pKey DeleteObject()
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
#define _tcscat
Definition: tchar.h:622
#define _tcscpy
Definition: tchar.h:623
#define IDS_ROTATION_PERIODIC
Definition: resource.h:4
#define IDC_CHECK_PERSPECTIVE
Definition: resource.h:23
#define IDC_SLIDER_NUM_OF_STARS
Definition: resource.h:14
#define IDC_TEXT_NUM_OF_STARS
Definition: resource.h:16
#define IDS_ROTATION_NONE
Definition: resource.h:2
#define IDB_COSMOS
Definition: resource.h:11
#define IDC_IMAGE_COSMOS
Definition: resource.h:19
#define IDC_SLIDER_SPEED
Definition: resource.h:15
#define IDC_CHECK_DOBLENDING
Definition: resource.h:22
#define IDC_TEXT_SPEED
Definition: resource.h:17
#define IDC_CHECK_SHADING
Definition: resource.h:25
#define IDC_BUTTON_ABOUT
Definition: resource.h:20
#define IDC_COMBO_ROTATION
Definition: resource.h:18
#define IDC_CHECK_FILTERING
Definition: resource.h:24
#define IDI_STARFIELD
Definition: resource.h:9
#define IDS_ROTATION_LINEAR
Definition: resource.h:3
static void ApplySettings(HWND hWnd)
Definition: settings.c:236
static void SetupControls(HWND hWnd)
Definition: settings.c:165
static void ReadSettings(HWND hWnd)
Definition: settings.c:252
static const SSSTARS FactoryDefaults
Definition: settings.c:36
static void SaveDWORD(HKEY hKey, LPCTSTR pszValueName, DWORD dwValue)
Definition: settings.c:75
static const DWORD RotoStrings[]
Definition: settings.c:47
#define SIZEOF(_v)
Definition: settings.c:30
static DWORD QueryDWORD(HKEY hKey, LPCTSTR pszValueName, DWORD Default)
Definition: settings.c:53
static BOOL OnCommandAbout(HWND hWnd)
Definition: settings.c:268
BOOL CALLBACK ScreenSaverConfigureDialog(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: settings.c:295
BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
Definition: settings.c:329
#define ROTATION_LINEAR
Definition: settings.h:25
#define MAX_STARS
Definition: settings.h:30
#define ROTATION_NONE
Definition: settings.h:24
#define MAX_SPEED
Definition: settings.h:33
#define MIN_STARS
Definition: settings.h:29
#define MIN_SPEED
Definition: settings.h:32
#define ROTATION_PERIODIC
Definition: settings.h:26
#define ROTATION_ITEMS
Definition: settings.h:27
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
static HICON
Definition: imagelist.c:84
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static HANDLE ULONG_PTR dwData
Definition: file.c:35
HICON hIcon
Definition: msconfig.c:44
unsigned int UINT
Definition: ndis.h:50
#define KEY_READ
Definition: nt_native.h:1023
#define KEY_WRITE
Definition: nt_native.h:1031
#define DWORD
Definition: nt_native.h:44
#define LOWORD(l)
Definition: pedump.c:82
long LONG
Definition: pedump.c:60
#define TBM_GETPOS
Definition: commctrl.h:2031
#define TBM_SETRANGE
Definition: commctrl.h:2037
#define TBM_SETPOS
Definition: commctrl.h:2036
#define REG_DWORD
Definition: sdbapi.c:596
#define ShellAbout
Definition: shellapi.h:692
TCHAR szAppName[128]
Definition: solitaire.cpp:18
BYTE lfQuality
Definition: dimm.idl:53
LONG lfHeight
Definition: dimm.idl:42
BYTE lfCharSet
Definition: dimm.idl:50
LONG lfWeight
Definition: dimm.idl:46
CHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:55
Definition: bl.h:1331
LONG cy
Definition: kdterminal.h:28
#define GetWindowLongPtr
Definition: treelist.c:73
HANDLE HINSTANCE
Definition: typedefs.h:77
unsigned char * LPBYTE
Definition: typedefs.h:53
#define _T(x)
Definition: vfdio.h:22
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
Definition: wdfdevice.h:2595
#define ZeroMemory
Definition: winbase.h:1712
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
#define GetTextExtentPoint32
Definition: wingdi.h:4472
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
#define FW_THIN
Definition: wingdi.h:369
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define TRANSPARENT
Definition: wingdi.h:950
#define ANSI_CHARSET
Definition: wingdi.h:383
#define PROOF_QUALITY
Definition: wingdi.h:438
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1056
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:918
#define GetObject
Definition: wingdi.h:4468
BOOL WINAPI DeleteDC(_In_ HDC)
#define CreateFontIndirect
Definition: wingdi.h:4444
#define TextOut
Definition: wingdi.h:4483
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define RegSetValueEx
Definition: winreg.h:533
#define RegCreateKeyEx
Definition: winreg.h:501
#define RegQueryValueEx
Definition: winreg.h:524
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define IMAGE_BITMAP
Definition: winuser.h:211
#define WM_HSCROLL
Definition: winuser.h:1743
#define MAKELPARAM(l, h)
Definition: winuser.h:4008
#define IDCANCEL
Definition: winuser.h:831
#define LR_CREATEDIBSECTION
Definition: winuser.h:1098
#define WM_COMMAND
Definition: winuser.h:1740
#define CB_SETCURSEL
Definition: winuser.h:1961
#define WM_INITDIALOG
Definition: winuser.h:1739
#define GWLP_HINSTANCE
Definition: winuser.h:856
#define STM_SETIMAGE
Definition: winuser.h:2093
#define IDOK
Definition: winuser.h:830
#define BM_SETCHECK
Definition: winuser.h:1921
BOOL WINAPI SetDlgItemInt(_In_ HWND, _In_ int, _In_ UINT, _In_ BOOL)
#define CB_ADDSTRING
Definition: winuser.h:1936
#define LoadIcon
Definition: winuser.h:5822
HDC WINAPI GetDC(_In_opt_ HWND)
#define LoadImage
Definition: winuser.h:5824
#define LoadString
Definition: winuser.h:5828
#define LR_DEFAULTSIZE
Definition: winuser.h:1094
#define CB_GETCURSEL
Definition: winuser.h:1943
#define SendDlgItemMessage
Definition: winuser.h:5851
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define BM_GETCHECK
Definition: winuser.h:1918
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
char TCHAR
Definition: xmlstorage.h:189
const CHAR * LPCTSTR
Definition: xmlstorage.h:193