[WIN32SS] Introduce the NATIVE_REACTX define and disable some Dx calls (#6025)
[reactos.git] / base / applications / msconfig / msconfig.c
1 /*
2 * PROJECT: ReactOS Applications
3 * LICENSE: LGPL - See COPYING in the top level directory
4 * FILE: base/applications/msconfig/msconfig.c
5 * PURPOSE: msconfig main dialog
6 * COPYRIGHT: Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de>
7 *
8 */
9
10 #include "precomp.h"
11
12 #include "toolspage.h"
13 #include "srvpage.h"
14 #include "startuppage.h"
15 #include "freeldrpage.h"
16 #include "systempage.h"
17 #include "generalpage.h"
18
19 HINSTANCE hInst = 0;
20
21 HWND hMainWnd; /* Main Window */
22 HWND hTabWnd; /* Tab Control Window */
23 UINT uXIcon = 0, uYIcon = 0; /* Icon sizes */
24 HICON hDialogIconBig = NULL;
25 HICON hDialogIconSmall = NULL;
26
27 void MsConfig_OnTabWndSelChange(void);
28
29 ////////////////////////////////////////////////////////////////////////////////
30 // Taken from WinSpy++ 1.7
31 // http://www.catch22.net/software/winspy
32 // Copyright (c) 2002 by J Brown
33 //
34
35 //
36 // Copied from uxtheme.h
37 // If you have this new header, then delete these and
38 // #include <uxtheme.h> instead!
39 //
40 #define ETDT_DISABLE 0x00000001
41 #define ETDT_ENABLE 0x00000002
42 #define ETDT_USETABTEXTURE 0x00000004
43 #define ETDT_ENABLETAB (ETDT_ENABLE | ETDT_USETABTEXTURE)
44
45 //
46 typedef HRESULT (WINAPI * ETDTProc) (HWND, DWORD);
47
48 //
49 // Try to call EnableThemeDialogTexture, if uxtheme.dll is present
50 //
51 BOOL EnableDialogTheme(HWND hwnd)
52 {
53 HMODULE hUXTheme;
54 ETDTProc fnEnableThemeDialogTexture;
55
56 hUXTheme = LoadLibrary(_T("uxtheme.dll"));
57
58 if(hUXTheme)
59 {
60 fnEnableThemeDialogTexture =
61 (ETDTProc)GetProcAddress(hUXTheme, "EnableThemeDialogTexture");
62
63 if(fnEnableThemeDialogTexture)
64 {
65 fnEnableThemeDialogTexture(hwnd, ETDT_ENABLETAB);
66
67 FreeLibrary(hUXTheme);
68 return TRUE;
69 }
70 else
71 {
72 // Failed to locate API!
73 FreeLibrary(hUXTheme);
74 return FALSE;
75 }
76 }
77 else
78 {
79 // Not running under XP? Just fail gracefully
80 return FALSE;
81 }
82 }
83 BOOL OnCreate(HWND hWnd)
84 {
85 TCHAR szTemp[256];
86 TCITEM item;
87
88 hTabWnd = GetDlgItem(hWnd, IDC_TAB);
89 hGeneralPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_GENERAL_PAGE), hWnd, GeneralPageWndProc); EnableDialogTheme(hGeneralPage);
90 hSystemPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_SYSTEM_PAGE), hWnd, SystemPageWndProc); EnableDialogTheme(hSystemPage);
91 hFreeLdrPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_FREELDR_PAGE), hWnd, FreeLdrPageWndProc); EnableDialogTheme(hFreeLdrPage);
92 hServicesPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_SERVICES_PAGE), hWnd, ServicesPageWndProc); EnableDialogTheme(hServicesPage);
93 hStartupPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_STARTUP_PAGE), hWnd, StartupPageWndProc); EnableDialogTheme(hStartupPage);
94 hToolsPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_TOOLS_PAGE), hWnd, ToolsPageWndProc); EnableDialogTheme(hToolsPage);
95
96 LoadString(hInst, IDS_MSCONFIG, szTemp, 256);
97 SetWindowText(hWnd, szTemp);
98
99 // Insert Tab Pages
100 LoadString(hInst, IDS_TAB_GENERAL, szTemp, 256);
101 memset(&item, 0, sizeof(TCITEM));
102 item.mask = TCIF_TEXT;
103 item.pszText = szTemp;
104 (void)TabCtrl_InsertItem(hTabWnd, 0, &item);
105
106 LoadString(hInst, IDS_TAB_SYSTEM, szTemp, 256);
107 memset(&item, 0, sizeof(TCITEM));
108 item.mask = TCIF_TEXT;
109 item.pszText = szTemp;
110 (void)TabCtrl_InsertItem(hTabWnd, 1, &item);
111
112 LoadString(hInst, IDS_TAB_FREELDR, szTemp, 256);
113 memset(&item, 0, sizeof(TCITEM));
114 item.mask = TCIF_TEXT;
115 item.pszText = szTemp;
116 (void)TabCtrl_InsertItem(hTabWnd, 2, &item);
117
118 LoadString(hInst, IDS_TAB_SERVICES, szTemp, 256);
119 memset(&item, 0, sizeof(TCITEM));
120 item.mask = TCIF_TEXT;
121 item.pszText = szTemp;
122 (void)TabCtrl_InsertItem(hTabWnd, 3, &item);
123
124 LoadString(hInst, IDS_TAB_STARTUP, szTemp, 256);
125 memset(&item, 0, sizeof(TCITEM));
126 item.mask = TCIF_TEXT;
127 item.pszText = szTemp;
128 (void)TabCtrl_InsertItem(hTabWnd, 4, &item);
129
130 LoadString(hInst, IDS_TAB_TOOLS, szTemp, 256);
131 memset(&item, 0, sizeof(TCITEM));
132 item.mask = TCIF_TEXT;
133 item.pszText = szTemp;
134 (void)TabCtrl_InsertItem(hTabWnd, 5, &item);
135
136 MsConfig_OnTabWndSelChange();
137
138 return TRUE;
139 }
140
141
142 void MsConfig_OnTabWndSelChange(void)
143 {
144 switch (TabCtrl_GetCurSel(hTabWnd)) {
145 case 0: //General
146 ShowWindow(hGeneralPage, SW_SHOW);
147 ShowWindow(hSystemPage, SW_HIDE);
148 ShowWindow(hFreeLdrPage, SW_HIDE);
149 ShowWindow(hServicesPage, SW_HIDE);
150 ShowWindow(hStartupPage, SW_HIDE);
151 ShowWindow(hToolsPage, SW_HIDE);
152 BringWindowToTop(hGeneralPage);
153 break;
154 case 1: //SYSTEM.INI
155 ShowWindow(hGeneralPage, SW_HIDE);
156 ShowWindow(hSystemPage, SW_SHOW);
157 ShowWindow(hToolsPage, SW_HIDE);
158 ShowWindow(hStartupPage, SW_HIDE);
159 ShowWindow(hFreeLdrPage, SW_HIDE);
160 ShowWindow(hServicesPage, SW_HIDE);
161 BringWindowToTop(hSystemPage);
162 break;
163 case 2: //Freeldr
164 ShowWindow(hGeneralPage, SW_HIDE);
165 ShowWindow(hSystemPage, SW_HIDE);
166 ShowWindow(hFreeLdrPage, SW_SHOW);
167 ShowWindow(hServicesPage, SW_HIDE);
168 ShowWindow(hStartupPage, SW_HIDE);
169 ShowWindow(hToolsPage, SW_HIDE);
170 BringWindowToTop(hFreeLdrPage);
171 break;
172 case 3: //Services
173 ShowWindow(hGeneralPage, SW_HIDE);
174 ShowWindow(hSystemPage, SW_HIDE);
175 ShowWindow(hFreeLdrPage, SW_HIDE);
176 ShowWindow(hServicesPage, SW_SHOW);
177 ShowWindow(hStartupPage, SW_HIDE);
178 ShowWindow(hToolsPage, SW_HIDE);
179 BringWindowToTop(hServicesPage);
180 break;
181 case 4: //startup
182 ShowWindow(hGeneralPage, SW_HIDE);
183 ShowWindow(hSystemPage, SW_HIDE);
184 ShowWindow(hFreeLdrPage, SW_HIDE);
185 ShowWindow(hServicesPage, SW_HIDE);
186 ShowWindow(hStartupPage, SW_SHOW);
187 ShowWindow(hToolsPage, SW_HIDE);
188 BringWindowToTop(hStartupPage);
189 break;
190 case 5: //Tools
191 ShowWindow(hGeneralPage, SW_HIDE);
192 ShowWindow(hSystemPage, SW_HIDE);
193 ShowWindow(hFreeLdrPage, SW_HIDE);
194 ShowWindow(hServicesPage, SW_HIDE);
195 ShowWindow(hStartupPage, SW_HIDE);
196 ShowWindow(hToolsPage, SW_SHOW);
197 BringWindowToTop(hToolsPage);
198 break;
199 }
200 }
201
202
203 static
204 VOID
205 SetDialogIcon(HWND hDlg)
206 {
207 if (hDialogIconBig) DestroyIcon(hDialogIconBig);
208 if (hDialogIconSmall) DestroyIcon(hDialogIconSmall);
209
210 hDialogIconBig = LoadIconW(GetModuleHandle(NULL),
211 MAKEINTRESOURCE(IDI_APPICON));
212 hDialogIconSmall = LoadImage(GetModuleHandle(NULL),
213 MAKEINTRESOURCE(IDI_APPICON),
214 IMAGE_ICON,
215 uXIcon,
216 uYIcon,
217 0);
218 SendMessage(hDlg,
219 WM_SETICON,
220 ICON_BIG,
221 (LPARAM)hDialogIconBig);
222 SendMessage(hDlg,
223 WM_SETICON,
224 ICON_SMALL,
225 (LPARAM)hDialogIconSmall);
226 }
227
228
229 /* Message handler for dialog box. */
230 INT_PTR CALLBACK
231 MsConfigWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
232 {
233 LPNMHDR pnmh;
234 UINT uXIconNew, uYIconNew;
235
236 switch (message)
237 {
238 case WM_INITDIALOG:
239 hMainWnd = hDlg;
240
241 uXIcon = GetSystemMetrics(SM_CXSMICON);
242 uYIcon = GetSystemMetrics(SM_CYSMICON);
243
244 SetDialogIcon(hDlg);
245
246 return OnCreate(hDlg);
247
248 case WM_SETTINGCHANGE:
249 uXIconNew = GetSystemMetrics(SM_CXSMICON);
250 uYIconNew = GetSystemMetrics(SM_CYSMICON);
251
252 if ((uXIcon != uXIconNew) || (uYIcon != uYIconNew))
253 {
254 uXIcon = uXIconNew;
255 uYIcon = uYIconNew;
256 SetDialogIcon(hDlg);
257 }
258 break;
259
260 case WM_COMMAND:
261
262 if (LOWORD(wParam) == IDOK)
263 {
264 //MsConfig_OnSaveChanges();
265 }
266
267 if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
268 EndDialog(hDlg, LOWORD(wParam));
269 return TRUE;
270 }
271 break;
272
273 case WM_NOTIFY:
274 pnmh = (LPNMHDR)lParam;
275 if ((pnmh->hwndFrom == hTabWnd) &&
276 (pnmh->idFrom == IDC_TAB) &&
277 (pnmh->code == TCN_SELCHANGE))
278 {
279 MsConfig_OnTabWndSelChange();
280 }
281 break;
282
283 case WM_SYSCOLORCHANGE:
284 /* Forward WM_SYSCOLORCHANGE to common controls */
285 SendMessage(hServicesListCtrl, WM_SYSCOLORCHANGE, 0, 0);
286 SendMessage(hStartupListCtrl, WM_SYSCOLORCHANGE, 0, 0);
287 SendMessage(hToolsListCtrl, WM_SYSCOLORCHANGE, 0, 0);
288 break;
289
290 case WM_DESTROY:
291 if (hToolsPage)
292 DestroyWindow(hToolsPage);
293 if (hGeneralPage)
294 DestroyWindow(hGeneralPage);
295 if (hServicesPage)
296 DestroyWindow(hServicesPage);
297 if (hStartupPage)
298 DestroyWindow(hStartupPage);
299 if (hFreeLdrPage)
300 DestroyWindow(hFreeLdrPage);
301 if (hSystemPage)
302 DestroyWindow(hSystemPage);
303 if (hDialogIconBig)
304 DestroyIcon(hDialogIconBig);
305 if (hDialogIconSmall)
306 DestroyIcon(hDialogIconSmall);
307 return DefWindowProc(hDlg, message, wParam, lParam);
308 }
309
310 return 0;
311 }
312
313 int APIENTRY _tWinMain(HINSTANCE hInstance,
314 HINSTANCE hPrevInstance,
315 LPTSTR lpCmdLine,
316 int nCmdShow)
317 {
318
319 INITCOMMONCONTROLSEX InitControls;
320
321 UNREFERENCED_PARAMETER(hPrevInstance);
322 UNREFERENCED_PARAMETER(lpCmdLine);
323 UNREFERENCED_PARAMETER(nCmdShow);
324
325 InitControls.dwSize = sizeof(INITCOMMONCONTROLSEX);
326 InitControls.dwICC = ICC_TAB_CLASSES | ICC_LISTVIEW_CLASSES;
327 InitCommonControlsEx(&InitControls);
328
329 hInst = hInstance;
330
331 DialogBox(hInst, (LPCTSTR)IDD_MSCONFIG_DIALOG, NULL, MsConfigWndProc);
332
333 return 0;
334 }
335
336 /* EOF */