ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

sysdm.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.