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