Synchronize with trunk revision 59781.
[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.c
5 * PURPOSE: msconfig main dialog
6 * COPYRIGHT: Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de>
7 *
8 */
9 #include "precomp.h"
10
11 HINSTANCE hInst = 0;
12
13 HWND hMainWnd; /* Main Window */
14 HWND hTabWnd; /* Tab Control Window */
15 UINT uXIcon = 0, uYIcon = 0; /* Icon sizes */
16 HICON hDialogIcon = NULL;
17
18 void MsConfig_OnTabWndSelChange(void);
19
20 BOOL OnCreate(HWND hWnd)
21 {
22 TCHAR szTemp[256];
23 TCITEM item;
24
25 hTabWnd = GetDlgItem(hWnd, IDC_TAB);
26 hGeneralPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_GENERAL_PAGE), hWnd, GeneralPageWndProc);
27 hSystemPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_SYSTEM_PAGE), hWnd, SystemPageWndProc);
28 hFreeLdrPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_FREELDR_PAGE), hWnd, FreeLdrPageWndProc);
29 hServicesPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_SERVICES_PAGE), hWnd, ServicesPageWndProc);
30 hStartupPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_STARTUP_PAGE), hWnd, StartupPageWndProc);
31 hToolsPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_TOOLS_PAGE), hWnd, ToolsPageWndProc);
32
33 LoadString(hInst, IDS_MSCONFIG, szTemp, 256);
34 SetWindowText(hWnd, szTemp);
35
36 // Insert Tab Pages
37 LoadString(hInst, IDS_TAB_GENERAL, szTemp, 256);
38 memset(&item, 0, sizeof(TCITEM));
39 item.mask = TCIF_TEXT;
40 item.pszText = szTemp;
41 (void)TabCtrl_InsertItem(hTabWnd, 0, &item);
42
43 LoadString(hInst, IDS_TAB_SYSTEM, szTemp, 256);
44 memset(&item, 0, sizeof(TCITEM));
45 item.mask = TCIF_TEXT;
46 item.pszText = szTemp;
47 (void)TabCtrl_InsertItem(hTabWnd, 1, &item);
48
49 LoadString(hInst, IDS_TAB_FREELDR, szTemp, 256);
50 memset(&item, 0, sizeof(TCITEM));
51 item.mask = TCIF_TEXT;
52 item.pszText = szTemp;
53 (void)TabCtrl_InsertItem(hTabWnd, 2, &item);
54
55 LoadString(hInst, IDS_TAB_SERVICES, szTemp, 256);
56 memset(&item, 0, sizeof(TCITEM));
57 item.mask = TCIF_TEXT;
58 item.pszText = szTemp;
59 (void)TabCtrl_InsertItem(hTabWnd, 3, &item);
60
61 LoadString(hInst, IDS_TAB_STARTUP, szTemp, 256);
62 memset(&item, 0, sizeof(TCITEM));
63 item.mask = TCIF_TEXT;
64 item.pszText = szTemp;
65 (void)TabCtrl_InsertItem(hTabWnd, 4, &item);
66
67 LoadString(hInst, IDS_TAB_TOOLS, szTemp, 256);
68 memset(&item, 0, sizeof(TCITEM));
69 item.mask = TCIF_TEXT;
70 item.pszText = szTemp;
71 (void)TabCtrl_InsertItem(hTabWnd, 5, &item);
72
73 MsConfig_OnTabWndSelChange();
74
75 return TRUE;
76 }
77
78
79 void MsConfig_OnTabWndSelChange(void)
80 {
81 switch (TabCtrl_GetCurSel(hTabWnd)) {
82 case 0: //General
83 ShowWindow(hGeneralPage, SW_SHOW);
84 ShowWindow(hSystemPage, SW_HIDE);
85 ShowWindow(hFreeLdrPage, SW_HIDE);
86 ShowWindow(hServicesPage, SW_HIDE);
87 ShowWindow(hStartupPage, SW_HIDE);
88 ShowWindow(hToolsPage, SW_HIDE);
89 BringWindowToTop(hGeneralPage);
90 break;
91 case 1: //SYSTEM.INI
92 ShowWindow(hGeneralPage, SW_HIDE);
93 ShowWindow(hSystemPage, SW_SHOW);
94 ShowWindow(hToolsPage, SW_HIDE);
95 ShowWindow(hStartupPage, SW_HIDE);
96 ShowWindow(hFreeLdrPage, SW_HIDE);
97 ShowWindow(hServicesPage, SW_HIDE);
98 BringWindowToTop(hSystemPage);
99 break;
100 case 2: //Freeldr
101 ShowWindow(hGeneralPage, SW_HIDE);
102 ShowWindow(hSystemPage, SW_HIDE);
103 ShowWindow(hFreeLdrPage, SW_SHOW);
104 ShowWindow(hServicesPage, SW_HIDE);
105 ShowWindow(hStartupPage, SW_HIDE);
106 ShowWindow(hToolsPage, SW_HIDE);
107 BringWindowToTop(hFreeLdrPage);
108 break;
109 case 3: //Services
110 ShowWindow(hGeneralPage, SW_HIDE);
111 ShowWindow(hSystemPage, SW_HIDE);
112 ShowWindow(hFreeLdrPage, SW_HIDE);
113 ShowWindow(hServicesPage, SW_SHOW);
114 ShowWindow(hStartupPage, SW_HIDE);
115 ShowWindow(hToolsPage, SW_HIDE);
116 BringWindowToTop(hServicesPage);
117 break;
118 case 4: //startup
119 ShowWindow(hGeneralPage, SW_HIDE);
120 ShowWindow(hSystemPage, SW_HIDE);
121 ShowWindow(hFreeLdrPage, SW_HIDE);
122 ShowWindow(hServicesPage, SW_HIDE);
123 ShowWindow(hStartupPage, SW_SHOW);
124 ShowWindow(hToolsPage, SW_HIDE);
125 BringWindowToTop(hStartupPage);
126 break;
127 case 5: //Tools
128 ShowWindow(hGeneralPage, SW_HIDE);
129 ShowWindow(hSystemPage, SW_HIDE);
130 ShowWindow(hFreeLdrPage, SW_HIDE);
131 ShowWindow(hServicesPage, SW_HIDE);
132 ShowWindow(hStartupPage, SW_HIDE);
133 ShowWindow(hToolsPage, SW_SHOW);
134 BringWindowToTop(hToolsPage);
135 break;
136 }
137 }
138
139
140 static
141 VOID
142 SetDialogIcon(HWND hDlg)
143 {
144 if (hDialogIcon) DestroyIcon(hDialogIcon);
145
146 hDialogIcon = LoadImage(GetModuleHandle(NULL),
147 MAKEINTRESOURCE(IDI_APPICON),
148 IMAGE_ICON,
149 uXIcon,
150 uYIcon,
151 0);
152 SendMessage(hDlg,
153 WM_SETICON,
154 ICON_SMALL,
155 (LPARAM)hDialogIcon);
156 }
157
158
159 /* Message handler for dialog box. */
160 INT_PTR CALLBACK
161 MsConfigWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
162 {
163 LPNMHDR pnmh;
164 UINT uXIconNew, uYIconNew;
165
166 switch (message)
167 {
168 case WM_INITDIALOG:
169 hMainWnd = hDlg;
170
171 uXIcon = GetSystemMetrics(SM_CXSMICON);
172 uYIcon = GetSystemMetrics(SM_CYSMICON);
173
174 SetDialogIcon(hDlg);
175
176 return OnCreate(hDlg);
177
178 case WM_SETTINGCHANGE:
179 uXIconNew = GetSystemMetrics(SM_CXSMICON);
180 uYIconNew = GetSystemMetrics(SM_CYSMICON);
181
182 if ((uXIcon != uXIconNew) || (uYIcon != uYIconNew))
183 {
184 uXIcon = uXIconNew;
185 uYIcon = uYIconNew;
186 SetDialogIcon(hDlg);
187 }
188 break;
189
190 case WM_COMMAND:
191
192 if (LOWORD(wParam) == IDOK)
193 {
194 //MsConfig_OnSaveChanges();
195 }
196
197 if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
198 EndDialog(hDlg, LOWORD(wParam));
199 return TRUE;
200 }
201 break;
202
203 case WM_NOTIFY:
204 pnmh = (LPNMHDR)lParam;
205 if ((pnmh->hwndFrom == hTabWnd) &&
206 (pnmh->idFrom == IDC_TAB) &&
207 (pnmh->code == TCN_SELCHANGE))
208 {
209 MsConfig_OnTabWndSelChange();
210 }
211 break;
212
213 case WM_SYSCOLORCHANGE:
214 /* Forward WM_SYSCOLORCHANGE to common controls */
215 SendMessage(hServicesListCtrl, WM_SYSCOLORCHANGE, 0, 0);
216 SendMessage(hStartupListCtrl, WM_SYSCOLORCHANGE, 0, 0);
217 SendMessage(hToolsListCtrl, WM_SYSCOLORCHANGE, 0, 0);
218 break;
219
220 case WM_DESTROY:
221 if (hToolsPage)
222 DestroyWindow(hToolsPage);
223 if (hGeneralPage)
224 DestroyWindow(hGeneralPage);
225 if (hServicesPage)
226 DestroyWindow(hServicesPage);
227 if (hStartupPage)
228 DestroyWindow(hStartupPage);
229 if (hFreeLdrPage)
230 DestroyWindow(hFreeLdrPage);
231 if (hSystemPage)
232 DestroyWindow(hSystemPage);
233 if (hDialogIcon)
234 DestroyIcon(hDialogIcon);
235 return DefWindowProc(hDlg, message, wParam, lParam);
236 }
237
238 return 0;
239 }
240
241 int APIENTRY _tWinMain(HINSTANCE hInstance,
242 HINSTANCE hPrevInstance,
243 LPTSTR lpCmdLine,
244 int nCmdShow)
245 {
246
247 INITCOMMONCONTROLSEX InitControls;
248
249 UNREFERENCED_PARAMETER(hPrevInstance);
250 UNREFERENCED_PARAMETER(lpCmdLine);
251 UNREFERENCED_PARAMETER(nCmdShow);
252
253 InitControls.dwSize = sizeof(INITCOMMONCONTROLSEX);
254 InitControls.dwICC = ICC_TAB_CLASSES | ICC_LISTVIEW_CLASSES;
255 InitCommonControlsEx(&InitControls);
256
257 hInst = hInstance;
258
259 DialogBox(hInst, (LPCTSTR)IDD_MSCONFIG_DIALOG, NULL, MsConfigWndProc);
260
261 return 0;
262 }
263
264 /* EOF */