Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygensysdm.c
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS System Control Panel Applet 00003 * LICENSE: GPL - See COPYING in the top level directory 00004 * FILE: dll/cpl/sysdm/sysdm.c 00005 * PURPOSE: dll entry file 00006 * COPYRIGHT: Copyright Thomas Weidenmueller <w3seek@reactos.org> 00007 * 00008 */ 00009 00010 #include "precomp.h" 00011 00012 LONG CALLBACK SystemApplet(VOID); 00013 HINSTANCE hApplet = 0; 00014 HWND hCPLWindow; 00015 00016 /* Applets */ 00017 APPLET Applets[NUM_APPLETS] = 00018 { 00019 {IDI_CPLSYSTEM, IDS_CPLSYSTEMNAME, IDS_CPLSYSTEMDESCRIPTION, SystemApplet} 00020 }; 00021 00022 #define MAX_SYSTEM_PAGES 32 00023 00024 static BOOL CALLBACK 00025 PropSheetAddPage(HPROPSHEETPAGE hpage, LPARAM lParam) 00026 { 00027 PROPSHEETHEADER *ppsh = (PROPSHEETHEADER *)lParam; 00028 if (ppsh != NULL && ppsh->nPages < MAX_SYSTEM_PAGES) 00029 { 00030 ppsh->phpage[ppsh->nPages++] = hpage; 00031 return TRUE; 00032 } 00033 00034 return FALSE; 00035 } 00036 00037 static BOOL 00038 InitPropSheetPage(PROPSHEETHEADER *ppsh, WORD idDlg, DLGPROC DlgProc) 00039 { 00040 HPROPSHEETPAGE hPage; 00041 PROPSHEETPAGE psp; 00042 00043 if (ppsh->nPages < MAX_SYSTEM_PAGES) 00044 { 00045 ZeroMemory(&psp, sizeof(psp)); 00046 psp.dwSize = sizeof(psp); 00047 psp.dwFlags = PSP_DEFAULT; 00048 psp.hInstance = hApplet; 00049 psp.pszTemplate = MAKEINTRESOURCE(idDlg); 00050 psp.pfnDlgProc = DlgProc; 00051 00052 hPage = CreatePropertySheetPage(&psp); 00053 if (hPage != NULL) 00054 { 00055 return PropSheetAddPage(hPage, (LPARAM)ppsh); 00056 } 00057 } 00058 00059 return FALSE; 00060 } 00061 00062 typedef HPROPSHEETPAGE (WINAPI *PCreateNetIDPropertyPage)(VOID); 00063 00064 static HMODULE 00065 AddNetIdPage(PROPSHEETHEADER *ppsh) 00066 { 00067 HPROPSHEETPAGE hPage; 00068 HMODULE hMod; 00069 PCreateNetIDPropertyPage pCreateNetIdPage; 00070 00071 hMod = LoadLibrary(TEXT("netid.dll")); 00072 if (hMod != NULL) 00073 { 00074 pCreateNetIdPage = (PCreateNetIDPropertyPage)GetProcAddress(hMod, 00075 "CreateNetIDPropertyPage"); 00076 if (pCreateNetIdPage != NULL) 00077 { 00078 hPage = pCreateNetIdPage(); 00079 if (hPage == NULL) 00080 goto Fail; 00081 00082 if (!PropSheetAddPage(hPage, (LPARAM)ppsh)) 00083 { 00084 DestroyPropertySheetPage(hPage); 00085 goto Fail; 00086 } 00087 } 00088 else 00089 { 00090 Fail: 00091 FreeLibrary(hMod); 00092 hMod = NULL; 00093 } 00094 } 00095 00096 return hMod; 00097 } 00098 00099 /* First Applet */ 00100 LONG CALLBACK 00101 SystemApplet(VOID) 00102 { 00103 HPROPSHEETPAGE hpsp[MAX_SYSTEM_PAGES]; 00104 PROPSHEETHEADER psh; 00105 HMODULE hNetIdDll; 00106 HPSXA hpsxa = NULL; 00107 LONG Ret; 00108 static INITCOMMONCONTROLSEX icc = {sizeof(INITCOMMONCONTROLSEX), ICC_LINK_CLASS}; 00109 00110 if (!InitCommonControlsEx(&icc)) 00111 return 0; 00112 00113 ZeroMemory(&psh, sizeof(PROPSHEETHEADER)); 00114 psh.dwSize = sizeof(PROPSHEETHEADER); 00115 psh.dwFlags = PSH_PROPTITLE; 00116 psh.hwndParent = hCPLWindow; 00117 psh.hInstance = hApplet; 00118 psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM)); 00119 psh.pszCaption = MAKEINTRESOURCE(IDS_CPLSYSTEMNAME); 00120 psh.nPages = 0; 00121 psh.nStartPage = 0; 00122 psh.phpage = hpsp; 00123 psh.pfnCallback = NULL; 00124 00125 InitPropSheetPage(&psh, IDD_PROPPAGEGENERAL, (DLGPROC) GeneralPageProc); 00126 hNetIdDll = AddNetIdPage(&psh); 00127 InitPropSheetPage(&psh, IDD_PROPPAGEHARDWARE, (DLGPROC) HardwarePageProc); 00128 InitPropSheetPage(&psh, IDD_PROPPAGEADVANCED, (DLGPROC) AdvancedPageProc); 00129 00130 /* Load additional pages provided by shell extensions */ 00131 hpsxa = SHCreatePropSheetExtArray(HKEY_LOCAL_MACHINE, REGSTR_PATH_CONTROLSFOLDER TEXT("\\System"), MAX_SYSTEM_PAGES - psh.nPages); 00132 if (hpsxa != NULL) 00133 { 00134 SHAddFromPropSheetExtArray(hpsxa, PropSheetAddPage, (LPARAM)&psh); 00135 } 00136 00137 Ret = (LONG)(PropertySheet(&psh) != -1); 00138 00139 if (hpsxa != NULL) 00140 { 00141 SHDestroyPropSheetExtArray(hpsxa); 00142 } 00143 00144 if (hNetIdDll != NULL) 00145 FreeLibrary(hNetIdDll); 00146 00147 return Ret; 00148 } 00149 00150 /* Control Panel Callback */ 00151 LONG CALLBACK 00152 CPlApplet(HWND hwndCPl, 00153 UINT uMsg, 00154 LPARAM lParam1, 00155 LPARAM lParam2) 00156 { 00157 INT i = (INT)lParam1; 00158 00159 UNREFERENCED_PARAMETER(hwndCPl); 00160 00161 switch (uMsg) 00162 { 00163 case CPL_INIT: 00164 return TRUE; 00165 00166 case CPL_GETCOUNT: 00167 return NUM_APPLETS; 00168 00169 case CPL_INQUIRE: 00170 { 00171 CPLINFO *CPlInfo = (CPLINFO*)lParam2; 00172 CPlInfo->lData = 0; 00173 CPlInfo->idIcon = Applets[i].idIcon; 00174 CPlInfo->idName = Applets[i].idName; 00175 CPlInfo->idInfo = Applets[i].idDescription; 00176 } 00177 break; 00178 00179 case CPL_DBLCLK: 00180 hCPLWindow = hwndCPl; 00181 Applets[i].AppletProc(); 00182 break; 00183 } 00184 00185 return FALSE; 00186 } 00187 00188 00189 BOOL WINAPI 00190 DllMain(HINSTANCE hinstDLL, 00191 DWORD dwReason, 00192 LPVOID lpvReserved) 00193 { 00194 UNREFERENCED_PARAMETER(lpvReserved); 00195 00196 switch (dwReason) 00197 { 00198 case DLL_PROCESS_ATTACH: 00199 case DLL_THREAD_ATTACH: 00200 hApplet = hinstDLL; 00201 break; 00202 } 00203 00204 return TRUE; 00205 } Generated on Sat May 26 2012 04:19:46 for ReactOS by
1.7.6.1
|