only destroy objects which are valid
[reactos.git] / reactos / 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
16 void MsConfig_OnTabWndSelChange(void);
17
18 BOOL OnCreate(HWND hWnd)
19 {
20 TCHAR szTemp[256];
21 TCITEM item;
22
23 hTabWnd = GetDlgItem(hWnd, IDC_TAB);
24 hGeneralPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_GENERAL_PAGE), hWnd, (DLGPROC) GeneralPageWndProc);
25 hSystemPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_SYSTEM_PAGE), hWnd, (DLGPROC) SystemPageWndProc);
26 hFreeLdrPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_FREELDR_PAGE), hWnd, (DLGPROC) FreeLdrPageWndProc);
27 hServicesPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_SERVICES_PAGE), hWnd, (DLGPROC) ServicesPageWndProc);
28 hStartupPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_STARTUP_PAGE), hWnd, (DLGPROC) StartupPageWndProc);
29 hToolsPage = CreateDialog(hInst, MAKEINTRESOURCE(IDD_TOOLS_PAGE), hWnd, (DLGPROC) ToolsPageWndProc);
30
31 LoadString(hInst, IDS_MSCONFIG, szTemp, 256);
32 SetWindowText(hWnd, szTemp);
33
34 // Insert Tab Pages
35 LoadString(hInst, IDS_TAB_GENERAL, szTemp, 256);
36 memset(&item, 0, sizeof(TCITEM));
37 item.mask = TCIF_TEXT;
38 item.pszText = szTemp;
39 (void)TabCtrl_InsertItem(hTabWnd, 0, &item);
40
41 LoadString(hInst, IDS_TAB_SYSTEM, szTemp, 256);
42 memset(&item, 0, sizeof(TCITEM));
43 item.mask = TCIF_TEXT;
44 item.pszText = szTemp;
45 (void)TabCtrl_InsertItem(hTabWnd, 1, &item);
46
47 LoadString(hInst, IDS_TAB_FREELDR, szTemp, 256);
48 memset(&item, 0, sizeof(TCITEM));
49 item.mask = TCIF_TEXT;
50 item.pszText = szTemp;
51 (void)TabCtrl_InsertItem(hTabWnd, 2, &item);
52
53 LoadString(hInst, IDS_TAB_SERVICES, szTemp, 256);
54 memset(&item, 0, sizeof(TCITEM));
55 item.mask = TCIF_TEXT;
56 item.pszText = szTemp;
57 (void)TabCtrl_InsertItem(hTabWnd, 3, &item);
58
59 LoadString(hInst, IDS_TAB_STARTUP, szTemp, 256);
60 memset(&item, 0, sizeof(TCITEM));
61 item.mask = TCIF_TEXT;
62 item.pszText = szTemp;
63 (void)TabCtrl_InsertItem(hTabWnd, 4, &item);
64
65 LoadString(hInst, IDS_TAB_TOOLS, szTemp, 256);
66 memset(&item, 0, sizeof(TCITEM));
67 item.mask = TCIF_TEXT;
68 item.pszText = szTemp;
69 (void)TabCtrl_InsertItem(hTabWnd, 5, &item);
70
71 MsConfig_OnTabWndSelChange();
72
73 return TRUE;
74 }
75
76
77 void MsConfig_OnTabWndSelChange(void)
78 {
79 switch (TabCtrl_GetCurSel(hTabWnd)) {
80 case 0: //General
81 ShowWindow(hGeneralPage, SW_SHOW);
82 ShowWindow(hSystemPage, SW_HIDE);
83 ShowWindow(hFreeLdrPage, SW_HIDE);
84 ShowWindow(hServicesPage, SW_HIDE);
85 ShowWindow(hStartupPage, SW_HIDE);
86 ShowWindow(hToolsPage, SW_HIDE);
87 BringWindowToTop(hGeneralPage);
88 break;
89 case 1: //SYSTEM.INI
90 ShowWindow(hGeneralPage, SW_HIDE);
91 ShowWindow(hSystemPage, SW_SHOW);
92 ShowWindow(hToolsPage, SW_HIDE);
93 ShowWindow(hStartupPage, SW_HIDE);
94 ShowWindow(hFreeLdrPage, SW_HIDE);
95 ShowWindow(hServicesPage, SW_HIDE);
96 BringWindowToTop(hSystemPage);
97 break;
98 case 2: //Freeldr
99 ShowWindow(hGeneralPage, SW_HIDE);
100 ShowWindow(hSystemPage, SW_HIDE);
101 ShowWindow(hFreeLdrPage, SW_SHOW);
102 ShowWindow(hServicesPage, SW_HIDE);
103 ShowWindow(hStartupPage, SW_HIDE);
104 ShowWindow(hToolsPage, SW_HIDE);
105 BringWindowToTop(hFreeLdrPage);
106 break;
107 case 3: //Services
108 ShowWindow(hGeneralPage, SW_HIDE);
109 ShowWindow(hSystemPage, SW_HIDE);
110 ShowWindow(hFreeLdrPage, SW_HIDE);
111 ShowWindow(hServicesPage, SW_SHOW);
112 ShowWindow(hStartupPage, SW_HIDE);
113 ShowWindow(hToolsPage, SW_HIDE);
114 BringWindowToTop(hServicesPage);
115 break;
116 case 4: //startup
117 ShowWindow(hGeneralPage, SW_HIDE);
118 ShowWindow(hSystemPage, SW_HIDE);
119 ShowWindow(hFreeLdrPage, SW_HIDE);
120 ShowWindow(hServicesPage, SW_HIDE);
121 ShowWindow(hStartupPage, SW_SHOW);
122 ShowWindow(hToolsPage, SW_HIDE);
123 BringWindowToTop(hStartupPage);
124 break;
125 case 5: //Tools
126 ShowWindow(hGeneralPage, SW_HIDE);
127 ShowWindow(hSystemPage, SW_HIDE);
128 ShowWindow(hFreeLdrPage, SW_HIDE);
129 ShowWindow(hServicesPage, SW_HIDE);
130 ShowWindow(hStartupPage, SW_HIDE);
131 ShowWindow(hToolsPage, SW_SHOW);
132 BringWindowToTop(hToolsPage);
133 break;
134 }
135 }
136
137
138 /* Message handler for dialog box. */
139 INT_PTR CALLBACK
140 MsConfigWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
141 {
142 int idctrl;
143 LPNMHDR pnmh;
144 static HICON hIcon;
145
146 switch (message)
147 {
148 case WM_INITDIALOG:
149 hMainWnd = hDlg;
150 hIcon = LoadImage(GetModuleHandle(NULL),
151 MAKEINTRESOURCE(IDI_APPICON),
152 IMAGE_ICON,
153 16,
154 16,
155 0);
156 SendMessage(hDlg,
157 WM_SETICON,
158 ICON_SMALL,
159 (LPARAM)hIcon);
160 return OnCreate(hDlg);
161
162 case WM_COMMAND:
163
164 if (LOWORD(wParam) == IDOK)
165 {
166 //MsConfig_OnSaveChanges();
167 }
168
169 if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
170 EndDialog(hDlg, LOWORD(wParam));
171 return TRUE;
172 }
173 break;
174
175 case WM_NOTIFY:
176 idctrl = (int)wParam;
177 pnmh = (LPNMHDR)lParam;
178 if ((pnmh->hwndFrom == hTabWnd) &&
179 (pnmh->idFrom == IDC_TAB) &&
180 (pnmh->code == TCN_SELCHANGE))
181 {
182 MsConfig_OnTabWndSelChange();
183 }
184 break;
185
186 case WM_DESTROY:
187 if (hToolsPage)
188 DestroyWindow(hToolsPage);
189 if (hGeneralPage)
190 DestroyWindow(hGeneralPage);
191 if (hServicesPage)
192 DestroyWindow(hServicesPage);
193 if (hStartupPage)
194 DestroyWindow(hStartupPage);
195 if (hFreeLdrPage)
196 DestroyWindow(hFreeLdrPage);
197 if (hSystemPage)
198 DestroyWindow(hSystemPage);
199 if (hIcon)
200 DestroyIcon(hIcon);
201 return DefWindowProc(hDlg, message, wParam, lParam);
202 }
203
204 return 0;
205 }
206
207 int APIENTRY WinMain(HINSTANCE hInstance,
208 HINSTANCE hPrevInstance,
209 LPSTR lpCmdLine,
210 int nCmdShow)
211 {
212
213 INITCOMMONCONTROLSEX InitControls;
214
215 UNREFERENCED_PARAMETER(hPrevInstance);
216 UNREFERENCED_PARAMETER(lpCmdLine);
217 UNREFERENCED_PARAMETER(nCmdShow);
218
219 InitControls.dwSize = sizeof(INITCOMMONCONTROLSEX);
220 InitControls.dwICC = ICC_TAB_CLASSES | ICC_LISTVIEW_CLASSES;
221 InitCommonControlsEx(&InitControls);
222
223 hInst = hInstance;
224
225 DialogBox(hInst, (LPCTSTR)IDD_MSCONFIG_DIALOG, NULL, (DLGPROC) MsConfigWndProc);
226
227 return 0;
228 }
229
230 /* EOF */