Use comctl32's syslink control, no need to reinvent the wheel
[reactos.git] / reactos / dll / cpl / sysdm / sysdm.c
1 /*
2 * PROJECT: ReactOS System Control Panel Applet
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/cpl/sysdm/sysdm.c
5 * PURPOSE: dll entry file
6 * COPYRIGHT: Copyright Thomas Weidenmueller <w3seek@reactos.org>
7 *
8 */
9
10 #include "precomp.h"
11
12 LONG CALLBACK SystemApplet(VOID);
13 HINSTANCE hApplet = 0;
14
15 /* Applets */
16 APPLET Applets[NUM_APPLETS] =
17 {
18 {IDI_CPLSYSTEM, IDS_CPLSYSTEMNAME, IDS_CPLSYSTEMDESCRIPTION, SystemApplet}
19 };
20
21 #define MAX_SYSTEM_PAGES 8
22
23 static BOOL CALLBACK
24 PropSheetAddPage(HPROPSHEETPAGE hpage, LPARAM lParam)
25 {
26 PROPSHEETHEADER *ppsh = (PROPSHEETHEADER *)lParam;
27 if (ppsh != NULL && ppsh->nPages < MAX_SYSTEM_PAGES)
28 {
29 ppsh->phpage[ppsh->nPages++] = hpage;
30 return TRUE;
31 }
32
33 return FALSE;
34 }
35
36 static BOOL
37 InitPropSheetPage(PROPSHEETHEADER *ppsh, WORD idDlg, DLGPROC DlgProc)
38 {
39 HPROPSHEETPAGE hPage;
40 PROPSHEETPAGE psp;
41
42 if (ppsh->nPages < MAX_SYSTEM_PAGES)
43 {
44 ZeroMemory(&psp, sizeof(psp));
45 psp.dwSize = sizeof(psp);
46 psp.dwFlags = PSP_DEFAULT;
47 psp.hInstance = hApplet;
48 psp.pszTemplate = MAKEINTRESOURCE(idDlg);
49 psp.pfnDlgProc = DlgProc;
50
51 hPage = CreatePropertySheetPage(&psp);
52 if (hPage != NULL)
53 {
54 return PropSheetAddPage(hPage, (LPARAM)ppsh);
55 }
56 }
57
58 return FALSE;
59 }
60
61 /* First Applet */
62
63 LONG CALLBACK
64 SystemApplet(VOID)
65 {
66 HPROPSHEETPAGE hpsp[MAX_SYSTEM_PAGES];
67 PROPSHEETHEADER psh;
68 TCHAR Caption[128];
69 static INITCOMMONCONTROLSEX icc = {sizeof(INITCOMMONCONTROLSEX), ICC_LINK_CLASS};
70
71 if (!InitCommonControlsEx(&icc))
72 return 0;
73
74 LoadString(hApplet, IDS_CPLSYSTEMNAME, Caption, sizeof(Caption) / sizeof(TCHAR));
75
76 ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
77 psh.dwSize = sizeof(PROPSHEETHEADER);
78 psh.dwFlags = PSH_PROPTITLE;
79 psh.hwndParent = NULL;
80 psh.hInstance = hApplet;
81 psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM));
82 psh.pszCaption = Caption;
83 psh.nPages = 0;
84 psh.nStartPage = 0;
85 psh.phpage = hpsp;
86 psh.pfnCallback = NULL;
87
88 InitPropSheetPage(&psh, IDD_PROPPAGEGENERAL, (DLGPROC) GeneralPageProc);
89 InitPropSheetPage(&psh, IDD_PROPPAGECOMPUTER, (DLGPROC) ComputerPageProc);
90 InitPropSheetPage(&psh, IDD_PROPPAGEHARDWARE, (DLGPROC) HardwarePageProc);
91 InitPropSheetPage(&psh, IDD_PROPPAGEADVANCED, (DLGPROC) AdvancedPageProc);
92
93 return (LONG)(PropertySheet(&psh) != -1);
94 }
95
96 /* Control Panel Callback */
97 LONG CALLBACK
98 CPlApplet(
99 HWND hwndCPl,
100 UINT uMsg,
101 LPARAM lParam1,
102 LPARAM lParam2)
103 {
104 int i = (int)lParam1;
105 UNREFERENCED_PARAMETER(hwndCPl);
106
107 switch(uMsg)
108 {
109 case CPL_INIT:
110 {
111 return TRUE;
112 }
113 case CPL_GETCOUNT:
114 {
115 return NUM_APPLETS;
116 }
117 case CPL_INQUIRE:
118 {
119 CPLINFO *CPlInfo = (CPLINFO*)lParam2;
120 CPlInfo->lData = 0;
121 CPlInfo->idIcon = Applets[i].idIcon;
122 CPlInfo->idName = Applets[i].idName;
123 CPlInfo->idInfo = Applets[i].idDescription;
124 break;
125 }
126 case CPL_DBLCLK:
127 {
128 Applets[i].AppletProc();
129 break;
130 }
131 }
132 return FALSE;
133 }
134
135
136 BOOL STDCALL
137 DllMain(
138 HINSTANCE hinstDLL,
139 DWORD dwReason,
140 LPVOID lpvReserved)
141 {
142 UNREFERENCED_PARAMETER(lpvReserved);
143 switch(dwReason)
144 {
145 case DLL_PROCESS_ATTACH:
146 case DLL_THREAD_ATTACH:
147 hApplet = hinstDLL;
148 break;
149 }
150 return TRUE;
151 }
152