xref: /reactos/dll/cpl/main/main.c (revision 2ea56af2)
1 /*
2  *  ReactOS
3  *  Copyright (C) 2004 ReactOS Team
4  *
5  *  This program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License along
16  *  with this program; if not, write to the Free Software Foundation, Inc.,
17  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 /*
20  * PROJECT:         ReactOS Sample Control Panel
21  * FILE:            dll/cpl/main/main.c
22  * PURPOSE:         ReactOS Main Control Panel
23  * PROGRAMMER:      Eric Kohl
24  * UPDATE HISTORY:
25  *      05-01-2004  Created
26  */
27 
28 #include "main.h"
29 
30 #define NUM_APPLETS	(2)
31 
32 
33 HINSTANCE hApplet = 0;
34 
35 
36 /* Applets */
37 APPLET Applets[NUM_APPLETS] =
38 {
39   {IDC_CPLICON_1, IDS_CPLNAME_1, IDS_CPLDESCRIPTION_1, MouseApplet},
40   {IDC_CPLICON_2, IDS_CPLNAME_2, IDS_CPLDESCRIPTION_2, KeyboardApplet}
41 };
42 
43 
44 BOOL
45 InitPropSheetPage(PROPSHEETHEADER *ppsh, WORD idDlg, DLGPROC DlgProc)
46 {
47     HPROPSHEETPAGE hPage;
48     PROPSHEETPAGE psp;
49 
50     if (ppsh->nPages < MAX_CPL_PAGES)
51     {
52         ZeroMemory(&psp, sizeof(psp));
53         psp.dwSize = sizeof(psp);
54         psp.dwFlags = PSP_DEFAULT;
55         psp.hInstance = hApplet;
56         psp.pszTemplate = MAKEINTRESOURCE(idDlg);
57         psp.pfnDlgProc = DlgProc;
58 
59         hPage = CreatePropertySheetPage(&psp);
60         if (hPage != NULL)
61         {
62             return PropSheetAddPage(hPage, (LPARAM)ppsh);
63         }
64     }
65 
66     return FALSE;
67 }
68 
69 BOOL CALLBACK
70 PropSheetAddPage(HPROPSHEETPAGE hpage, LPARAM lParam)
71 {
72     PROPSHEETHEADER *ppsh = (PROPSHEETHEADER *)lParam;
73     if (ppsh != NULL && ppsh->nPages < MAX_CPL_PAGES)
74     {
75         ppsh->phpage[ppsh->nPages++] = hpage;
76         return TRUE;
77     }
78 
79     return FALSE;
80 }
81 
82 
83 /* Control Panel Callback */
84 LONG CALLBACK
85 CPlApplet(HWND hwndCpl,
86           UINT uMsg,
87           LPARAM lParam1,
88           LPARAM lParam2)
89 {
90     UINT i = (UINT)lParam1;
91 
92     switch(uMsg)
93     {
94         case CPL_INIT:
95             return TRUE;
96 
97         case CPL_GETCOUNT:
98             return NUM_APPLETS;
99 
100         case CPL_INQUIRE:
101             if (i < NUM_APPLETS)
102             {
103                 CPLINFO *CPlInfo = (CPLINFO*)lParam2;
104                 CPlInfo->lData = lParam1;
105                 CPlInfo->idIcon = Applets[i].idIcon;
106                 CPlInfo->idName = Applets[i].idName;
107                 CPlInfo->idInfo = Applets[i].idDescription;
108             }
109             else
110             {
111                 return TRUE;
112             }
113             break;
114 
115         case CPL_DBLCLK:
116             if (i < NUM_APPLETS)
117                 Applets[i].AppletProc(hwndCpl, uMsg, lParam1, lParam2);
118             else
119                 return TRUE;
120             break;
121 
122         case CPL_STARTWPARMSW:
123             if (i < NUM_APPLETS)
124                 return Applets[i].AppletProc(hwndCpl, uMsg, lParam1, lParam2);
125             break;
126     }
127 
128     return FALSE;
129 }
130 
131 
132 BOOL WINAPI
133 DllMain(HINSTANCE hinstDLL,
134         DWORD dwReason,
135         LPVOID lpReserved)
136 {
137     INITCOMMONCONTROLSEX InitControls;
138     UNREFERENCED_PARAMETER(lpReserved);
139 
140     switch(dwReason)
141     {
142         case DLL_PROCESS_ATTACH:
143             InitControls.dwSize = sizeof(INITCOMMONCONTROLSEX);
144             InitControls.dwICC = ICC_LISTVIEW_CLASSES | ICC_UPDOWN_CLASS | ICC_BAR_CLASSES;
145             InitCommonControlsEx(&InitControls);
146 
147             hApplet = hinstDLL;
148             break;
149     }
150 
151     return TRUE;
152 }
153