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

mmsys.c
Go to the documentation of this file.
00001 /*
00002  *
00003  * PROJECT:         ReactOS Multimedia Control Panel
00004  * FILE:            dll/cpl/mmsys/mmsys.c
00005  * PURPOSE:         ReactOS Multimedia Control Panel
00006  * PROGRAMMER:      Thoams Weidenmueller <w3seek@reactos.com>
00007  *                  Dmitry Chapyshev <dmitry@reactos.org>
00008  * UPDATE HISTORY:
00009  *      2005/11/23  Created
00010  */
00011 
00012 #include "mmsys.h"
00013 
00014 typedef enum
00015 {
00016     HWPD_STANDARDLIST = 0,
00017     HWPD_LARGELIST,
00018     HWPD_MAX = HWPD_LARGELIST
00019 } HWPAGE_DISPLAYMODE, *PHWPAGE_DISPLAYMODE;
00020 
00021 typedef struct
00022 {
00023     LPWSTR LabelName;
00024     LPWSTR DefaultName;
00025     UINT LocalizedResId;
00026     LPWSTR FileName;
00027 }EVENT_LABEL_ITEM;
00028 
00029 typedef struct
00030 {
00031     LPWSTR LabelName;
00032     LPWSTR DefaultName;
00033     UINT IconId;
00034 }SYSTEM_SCHEME_ITEM;
00035 
00036 static EVENT_LABEL_ITEM EventLabels[] =
00037 {
00038     {
00039         L"WindowsLogon",
00040         L"ReactOS Logon",
00041         IDS_REACTOS_LOGON,
00042         L"ReactOS_Logon.wav"
00043     },
00044     {
00045         L"WindowsLogoff",
00046         L"ReactOS Logoff",
00047         IDS_REACTOS_LOGOFF,
00048         L"ReactOS_Logoff.wav"
00049     },
00050     {
00051         NULL,
00052         NULL,
00053         0,
00054         NULL
00055     }
00056 };
00057 
00058 static SYSTEM_SCHEME_ITEM SystemSchemes[] =
00059 {
00060     {
00061         L".Default",
00062         L"ReactOS Standard",
00063         IDS_REACTOS_DEFAULT_SCHEME
00064     },
00065     {
00066         L".None",
00067         L"No Sounds",
00068         -1
00069     },
00070     {
00071         NULL,
00072         NULL
00073     }
00074 };
00075 
00076 
00077 HWND WINAPI
00078 DeviceCreateHardwarePageEx(HWND hWndParent,
00079                            LPGUID lpGuids,
00080                            UINT uNumberOfGuids,
00081                            HWPAGE_DISPLAYMODE DisplayMode);
00082 
00083 #define NUM_APPLETS    (1)
00084 
00085 
00086 HINSTANCE hApplet = 0;
00087 
00088 /* Applets */
00089 const APPLET Applets[NUM_APPLETS] =
00090 {
00091   {IDI_CPLICON, IDS_CPLNAME, IDS_CPLDESCRIPTION, MmSysApplet},
00092 };
00093 
00094 
00095 HRESULT WINAPI
00096 DllCanUnloadNow(VOID)
00097 {
00098     DPRINT1("DllCanUnloadNow() stubs\n");
00099     return S_OK;
00100 }
00101 
00102 HRESULT WINAPI
00103 DllGetClassObject(REFCLSID rclsid,
00104                   REFIID riid,
00105                   LPVOID *ppv)
00106 {
00107     DPRINT1("DllGetClassObject() stubs\n");
00108     return S_OK;
00109 }
00110 
00111 
00112 VOID WINAPI
00113 ShowDriverSettingsAfterForkW(HWND hwnd,
00114                              HINSTANCE hInstance,
00115                              LPWSTR lpszCmd,
00116                              int nCmdShow)
00117 {
00118     DPRINT1("ShowDriverSettingsAfterForkW() stubs\n");
00119 }
00120 
00121 VOID WINAPI
00122 ShowDriverSettingsAfterForkA(HWND hwnd,
00123                              HINSTANCE hInstance,
00124                              LPSTR lpszCmd,
00125                              int nCmdShow)
00126 {
00127     DPRINT1("ShowDriverSettingsAfterForkA() stubs\n");
00128 }
00129 
00130 VOID WINAPI
00131 ShowDriverSettingsAfterFork(HWND hwnd,
00132                             HINSTANCE hInstance,
00133                             LPSTR lpszCmd,
00134                             int nCmdShow)
00135 {
00136     DPRINT1("ShowDriverSettingsAfterFork() stubs\n");
00137 }
00138 
00139 BOOL WINAPI
00140 ShowMMCPLPropertySheet(HWND hwnd,
00141                        LPCSTR pszPropSheet,
00142                        LPSTR pszName,
00143                        LPSTR pszCaption)
00144 {
00145     DPRINT1("ShowMMCPLPropertySheet() stubs\n");
00146     return TRUE;
00147 }
00148 
00149 VOID WINAPI
00150 ShowAudioPropertySheet(HWND hwnd,
00151                        HINSTANCE hInstance,
00152                        LPTSTR lpszCmd,
00153                        int nCmdShow)
00154 {
00155     DPRINT1("ShowAudioPropertySheet() stubs\n");
00156 }
00157 
00158 VOID WINAPI
00159 mmseRunOnceW(HWND hwnd,
00160              HINSTANCE hInstance,
00161              LPWSTR lpszCmd,
00162              int nCmdShow)
00163 {
00164     DPRINT1("mmseRunOnceW() stubs\n");
00165 }
00166 
00167 VOID WINAPI
00168 mmseRunOnceA(HWND hwnd,
00169              HINSTANCE hInstance,
00170              LPSTR lpszCmd,
00171              int nCmdShow)
00172 {
00173     DPRINT1("mmseRunOnceA() stubs\n");
00174 }
00175 
00176 VOID WINAPI
00177 mmseRunOnce(HWND hwnd,
00178             HINSTANCE hInstance,
00179             LPSTR lpszCmd,
00180             int nCmdShow)
00181 {
00182     DPRINT1("mmseRunOnce() stubs\n");
00183 }
00184 
00185 BOOL WINAPI
00186 MediaPropPageProvider(LPVOID Info,
00187                       LPFNADDPROPSHEETPAGE PropSheetPage,
00188                       LPARAM lParam)
00189 {
00190     DPRINT1("MediaPropPageProvider() stubs\n");
00191     return TRUE;
00192 }
00193 
00194 VOID WINAPI
00195 ShowFullControlPanel(HWND hwnd,
00196                      HINSTANCE hInstance,
00197                      LPSTR lpszCmd,
00198                      int nCmdShow)
00199 {
00200     DPRINT1("ShowFullControlPanel() stubs\n");
00201 }
00202 
00203 VOID
00204 InstallSystemSoundLabels(HKEY hKey)
00205 {
00206     UINT i = 0;
00207     HKEY hSubKey;
00208     WCHAR Buffer[40];
00209 
00210     do
00211     {
00212         if (RegCreateKeyExW(hKey, EventLabels[i].LabelName,  0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL) == ERROR_SUCCESS)
00213         {
00214             RegSetValueExW(hSubKey, NULL, 0, REG_SZ, (LPBYTE)EventLabels[i].DefaultName, (wcslen(EventLabels[i].DefaultName)+1) * sizeof(WCHAR));
00215             swprintf(Buffer, L"@mmsys.cpl,-%u", EventLabels[i].LocalizedResId);
00216             RegSetValueExW(hSubKey, L"DispFileName", 0, REG_SZ, (LPBYTE)Buffer, (wcslen(Buffer)+1) * sizeof(WCHAR));
00217 
00218             RegCloseKey(hSubKey);
00219         }
00220         i++;
00221     }while(EventLabels[i].LabelName);
00222 }
00223 
00224 VOID
00225 InstallSystemSoundSchemeNames(HKEY hKey)
00226 {
00227     UINT i = 0;
00228     HKEY hSubKey;
00229 
00230     do
00231     {
00232         if (RegCreateKeyExW(hKey, SystemSchemes[i].LabelName,  0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL) == ERROR_SUCCESS)
00233         {
00234             RegSetValueExW(hSubKey, NULL, 0, REG_SZ, (LPBYTE)SystemSchemes[i].DefaultName, (wcslen(SystemSchemes[i].DefaultName)+1) * sizeof(WCHAR));
00235             RegCloseKey(hSubKey);
00236         }
00237         i++;
00238     }while(SystemSchemes[i].LabelName);
00239 }
00240 
00241 VOID
00242 InstallDefaultSystemSoundScheme(HKEY hRootKey)
00243 {
00244     HKEY hKey, hSubKey;
00245     WCHAR Path[MAX_PATH];
00246     UINT i = 0;
00247 
00248     if (RegCreateKeyExW(hRootKey, L".Default", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) != ERROR_SUCCESS)
00249         return;
00250 
00251     RegSetValueExW(hKey, NULL, 0, REG_SZ, (LPBYTE)SystemSchemes[0].DefaultName, (wcslen(SystemSchemes[0].DefaultName)+1) * sizeof(WCHAR));
00252     swprintf(Path, L"@mmsys.cpl,-%u", SystemSchemes[0].IconId);
00253     RegSetValueExW(hKey, L"DispFileName", 0, REG_SZ, (LPBYTE)Path, (wcslen(Path)+1) * sizeof(WCHAR));
00254 
00255     do
00256     {
00257         if (RegCreateKeyExW(hKey, EventLabels[i].LabelName,  0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL) == ERROR_SUCCESS)
00258         {
00259             HKEY hScheme;
00260 
00261             swprintf(Path, L"%%SystemRoot%%\\media\\%s", EventLabels[i].FileName);
00262             if (RegCreateKeyExW(hSubKey, L".Current",  0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hScheme, NULL) == ERROR_SUCCESS)
00263             {
00264                 RegSetValueExW(hScheme, NULL, 0, REG_EXPAND_SZ, (LPBYTE)Path, (wcslen(Path)+1) * sizeof(WCHAR));
00265                 RegCloseKey(hScheme);
00266             }
00267 
00268             if (RegCreateKeyExW(hSubKey, L".Default",  0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hScheme, NULL) == ERROR_SUCCESS)
00269             {
00270                 RegSetValueExW(hScheme, NULL, 0, REG_EXPAND_SZ, (LPBYTE)Path, (wcslen(Path)+1) * sizeof(WCHAR));
00271                 RegCloseKey(hScheme);
00272             }
00273             RegCloseKey(hSubKey);
00274         }
00275         i++;
00276     }while(EventLabels[i].LabelName);
00277 
00278     RegCloseKey(hKey);
00279 }
00280 
00281 
00282 VOID
00283 InstallSystemSoundScheme()
00284 {
00285     HKEY hKey, hSubKey;
00286     DWORD dwDisposition;
00287 
00288     if (RegCreateKeyExW(HKEY_CURRENT_USER, L"AppEvents", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) != ERROR_SUCCESS)
00289         return;
00290 
00291     if (RegCreateKeyExW(hKey, L"EventLabels", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL) == ERROR_SUCCESS)
00292     {
00293         InstallSystemSoundLabels(hSubKey);
00294         RegCloseKey(hSubKey);
00295     }
00296 
00297     if (RegCreateKeyExW(hKey, L"Schemes", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, &dwDisposition) == ERROR_SUCCESS)
00298     {
00299         HKEY hNames;
00300 
00301         if (RegCreateKeyExW(hSubKey, L"Names", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hNames, NULL) == ERROR_SUCCESS)
00302         {
00303             InstallSystemSoundSchemeNames(hNames);
00304             RegCloseKey(hNames);
00305         }
00306 
00307         if (RegCreateKeyExW(hSubKey, L"Apps", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hNames, NULL) == ERROR_SUCCESS)
00308         {
00309             InstallDefaultSystemSoundScheme(hNames);
00310             RegCloseKey(hNames);
00311             if (dwDisposition & REG_CREATED_NEW_KEY)
00312             {
00313                 // FIXME
00314                 RegSetValueExW(hSubKey, NULL, 0, REG_SZ, (LPBYTE)L".Default", (wcslen(L".Default")+1) * sizeof(WCHAR));
00315             }
00316         }
00317 
00318         RegCloseKey(hSubKey);
00319     }
00320 
00321     RegCloseKey(hKey);
00322 }
00323 
00324 
00325 DWORD
00326 MMSYS_InstallDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData)
00327 {
00328     UINT Length;
00329     LPWSTR pBuffer;
00330     WCHAR szBuffer[MAX_PATH];
00331     HINF hInf;
00332     PVOID Context;
00333     BOOL Result;
00334     SC_HANDLE hSCManager, hService;
00335     WCHAR WaveName[20];
00336     HKEY hKey;
00337     DWORD BufferSize;
00338     ULONG Index;
00339 
00340     if (!IsEqualIID(&pspDevInfoData->ClassGuid, &GUID_DEVCLASS_SOUND) &&
00341         !IsEqualIID(&pspDevInfoData->ClassGuid, &GUID_DEVCLASS_MEDIA))
00342         return ERROR_DI_DO_DEFAULT;
00343 
00344     Length = GetWindowsDirectoryW(szBuffer, MAX_PATH);
00345     if (!Length || Length >= MAX_PATH - 14)
00346     {
00347         return ERROR_GEN_FAILURE;
00348     }
00349 
00350     pBuffer = PathAddBackslashW(szBuffer);
00351     if (!pBuffer)
00352     {
00353         return ERROR_GEN_FAILURE;
00354     }
00355 
00356     wcscpy(pBuffer, L"inf\\audio.inf");
00357 
00358     hInf = SetupOpenInfFileW(szBuffer,
00359                              NULL,
00360                             INF_STYLE_WIN4,
00361                             NULL);
00362 
00363     if (hInf == INVALID_HANDLE_VALUE)
00364     {
00365         return ERROR_GEN_FAILURE;
00366     }
00367 
00368     Context = SetupInitDefaultQueueCallback(NULL);
00369     if (Context == NULL)
00370     {
00371         SetupCloseInfFile(hInf);
00372         return ERROR_GEN_FAILURE;
00373     }
00374 
00375     Result = SetupInstallFromInfSectionW(NULL,
00376                                          hInf,
00377                                          L"AUDIO_Inst.NT",
00378                                          SPINST_ALL,
00379                                          NULL,
00380                                          NULL,
00381                                          SP_COPY_NEWER,
00382                                          SetupDefaultQueueCallbackW,
00383                                          Context,
00384                                          NULL,
00385                                          NULL);
00386 
00387     if (Result)
00388     {
00389         Result = SetupInstallServicesFromInfSectionW(hInf,
00390                                                      L"Audio_Inst.NT.Services",
00391                                                      0);
00392     }
00393 
00394     SetupTermDefaultQueueCallback(Context);
00395     SetupCloseInfFile(hInf);
00396 
00397 
00398 
00399     hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
00400     if (!hSCManager)
00401     {
00402         return ERROR_DI_DO_DEFAULT;
00403     }
00404 
00405     hService = OpenService(hSCManager, L"RosAudioSrv", SERVICE_ALL_ACCESS);
00406     if (hService)
00407     {
00408         /* Make RosAudioSrv start automatically */
00409         ChangeServiceConfig(hService, SERVICE_NO_CHANGE, SERVICE_AUTO_START, SERVICE_NO_CHANGE, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
00410 
00411         StartService(hService, 0, NULL);
00412         CloseServiceHandle(hService);
00413     }
00414     CloseServiceHandle(hSCManager);
00415 
00416     if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Drivers32", 0, GENERIC_READ | GENERIC_WRITE, &hKey) == ERROR_SUCCESS)
00417     {
00418         szBuffer[Length] = '\0';
00419         pBuffer = PathAddBackslashW(szBuffer);
00420         wcscpy(pBuffer, L"system32\\wdmaud.drv");
00421 
00422         for(Index = 1; Index <= 4; Index++)
00423         {
00424             swprintf(WaveName, L"wave%u", Index);
00425             if (RegQueryValueExW(hKey, WaveName, 0, NULL, NULL, &BufferSize) != ERROR_MORE_DATA)
00426             {
00427                 /* Store new audio driver entry */
00428                 RegSetValueExW(hKey, WaveName, 0, REG_SZ, (LPBYTE)szBuffer, (wcslen(szBuffer)+1) * sizeof(WCHAR));
00429                 break;
00430             }
00431             else
00432             {
00433                 WCHAR Buffer[MAX_PATH];
00434                 BufferSize = sizeof(Buffer);
00435 
00436                 if (RegQueryValueExW(hKey, WaveName, 0, NULL, (LPBYTE)Buffer, &BufferSize) == ERROR_SUCCESS)
00437                 {
00438                     /* Make sure the buffer is zero terminated */
00439                     Buffer[MAX_PATH-1] = L'\0';
00440 
00441                     if (!wcsicmp(Buffer, szBuffer))
00442                     {
00443                         /* An entry already exists */
00444                         break;
00445                     }
00446                 }
00447             }
00448         }
00449         RegCloseKey(hKey);
00450     }
00451     InstallSystemSoundScheme();
00452 
00453     return ERROR_DI_DO_DEFAULT;
00454 
00455 }
00456 
00457 DWORD
00458 MMSYS_RemoveDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData)
00459 {
00460     return ERROR_DI_DO_DEFAULT;
00461 }
00462 
00463 DWORD
00464 MMSYS_AllowInstallDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData)
00465 {
00466     return ERROR_DI_DO_DEFAULT;
00467 }
00468 
00469 DWORD
00470 MMSYS_SelectDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData)
00471 {
00472     return ERROR_DI_DO_DEFAULT;
00473 }
00474 
00475 DWORD
00476 MMSYS_DetectDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData)
00477 {
00478     return ERROR_DI_DO_DEFAULT;
00479 }
00480 
00481 DWORD
00482 MMSYS_SelectBestCompatDRV(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData)
00483 {
00484     return ERROR_DI_DO_DEFAULT;
00485 }
00486 
00487 DWORD WINAPI
00488 MediaClassInstaller(IN DI_FUNCTION diFunction,
00489                     IN HDEVINFO hDevInfo,
00490                     IN PSP_DEVINFO_DATA pspDevInfoData OPTIONAL)
00491 {
00492     switch (diFunction)
00493     {
00494         case DIF_INSTALLDEVICE:
00495             return MMSYS_InstallDevice(hDevInfo, pspDevInfoData);
00496         case DIF_REMOVE:
00497             return MMSYS_RemoveDevice(hDevInfo, pspDevInfoData);
00498         case DIF_ALLOW_INSTALL:
00499             return MMSYS_AllowInstallDevice(hDevInfo, pspDevInfoData);
00500         case DIF_SELECTDEVICE:
00501             return MMSYS_SelectDevice(hDevInfo, pspDevInfoData);
00502         case DIF_DETECT:
00503             return MMSYS_DetectDevice(hDevInfo, pspDevInfoData);
00504         case DIF_SELECTBESTCOMPATDRV:
00505             return MMSYS_SelectBestCompatDRV(hDevInfo, pspDevInfoData);
00506         default:
00507             return ERROR_DI_DO_DEFAULT;
00508     }
00509 }
00510 
00511 
00512 /* Hardware property page dialog callback */
00513 static INT_PTR CALLBACK
00514 HardwareDlgProc(HWND hwndDlg,
00515                 UINT uMsg,
00516                 WPARAM wParam,
00517                 LPARAM lParam)
00518 {
00519     UNREFERENCED_PARAMETER(lParam);
00520     UNREFERENCED_PARAMETER(wParam);
00521     switch(uMsg)
00522     {
00523         case WM_INITDIALOG:
00524         {
00525             GUID Guids[2];
00526             Guids[0] = GUID_DEVCLASS_CDROM;
00527             Guids[1] = GUID_DEVCLASS_MEDIA;
00528 
00529             /* Create the hardware page */
00530             DeviceCreateHardwarePageEx(hwndDlg,
00531                                        Guids,
00532                                        sizeof(Guids) / sizeof(Guids[0]),
00533                                        HWPD_LARGELIST);
00534             break;
00535         }
00536     }
00537 
00538     return FALSE;
00539 }
00540 
00541 LONG APIENTRY
00542 MmSysApplet(HWND hwnd,
00543             UINT uMsg,
00544             LPARAM wParam,
00545             LPARAM lParam)
00546 {
00547     PROPSHEETPAGE psp[5];
00548     PROPSHEETHEADER psh; // = { 0 };
00549     TCHAR Caption[256];
00550 
00551     UNREFERENCED_PARAMETER(lParam);
00552     UNREFERENCED_PARAMETER(wParam);
00553     UNREFERENCED_PARAMETER(uMsg);
00554 
00555     LoadString(hApplet,
00556                IDS_CPLNAME,
00557                Caption,
00558                sizeof(Caption) / sizeof(TCHAR));
00559 
00560     psh.dwSize = sizeof(PROPSHEETHEADER);
00561     psh.dwFlags =  PSH_PROPSHEETPAGE | PSH_PROPTITLE;
00562     psh.hwndParent = hwnd;
00563     psh.hInstance = hApplet;
00564     psh.hIcon = LoadIcon(hApplet,
00565                          MAKEINTRESOURCE(IDI_CPLICON));
00566     psh.pszCaption = Caption;
00567     psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
00568     psh.nStartPage = 0;
00569     psh.ppsp = psp;
00570 
00571     InitPropSheetPage(&psp[0], IDD_VOLUME,VolumeDlgProc);
00572     InitPropSheetPage(&psp[1], IDD_SOUNDS,SoundsDlgProc);
00573     InitPropSheetPage(&psp[2], IDD_AUDIO,AudioDlgProc);
00574     InitPropSheetPage(&psp[3], IDD_VOICE,VoiceDlgProc);
00575     InitPropSheetPage(&psp[4], IDD_HARDWARE,HardwareDlgProc);
00576 
00577     return (LONG)(PropertySheet(&psh) != -1);
00578 }
00579 
00580 VOID
00581 InitPropSheetPage(PROPSHEETPAGE *psp,
00582                   WORD idDlg,
00583                   DLGPROC DlgProc)
00584 {
00585     ZeroMemory(psp, sizeof(PROPSHEETPAGE));
00586     psp->dwSize = sizeof(PROPSHEETPAGE);
00587     psp->dwFlags = PSP_DEFAULT;
00588     psp->hInstance = hApplet;
00589     psp->pszTemplate = MAKEINTRESOURCE(idDlg);
00590     psp->pfnDlgProc = DlgProc;
00591 }
00592 
00593 
00594 /* Control Panel Callback */
00595 LONG CALLBACK
00596 CPlApplet(HWND hwndCpl,
00597           UINT uMsg,
00598           LPARAM lParam1,
00599           LPARAM lParam2)
00600 {
00601     switch(uMsg)
00602     {
00603         case CPL_INIT:
00604             return TRUE;
00605 
00606         case CPL_GETCOUNT:
00607             return NUM_APPLETS;
00608 
00609         case CPL_INQUIRE:
00610         {
00611             CPLINFO *CPlInfo = (CPLINFO*)lParam2;
00612             UINT uAppIndex = (UINT)lParam1;
00613 
00614             CPlInfo->lData = 0;
00615             CPlInfo->idIcon = Applets[uAppIndex].idIcon;
00616             CPlInfo->idName = Applets[uAppIndex].idName;
00617             CPlInfo->idInfo = Applets[uAppIndex].idDescription;
00618             break;
00619         }
00620 
00621         case CPL_DBLCLK:
00622         {
00623             UINT uAppIndex = (UINT)lParam1;
00624             Applets[uAppIndex].AppletProc(hwndCpl,
00625                                           uMsg,
00626                                           lParam1,
00627                                           lParam2);
00628             break;
00629         }
00630     }
00631 
00632     return FALSE;
00633 }
00634 
00635 
00636 BOOL WINAPI
00637 DllMain(HINSTANCE hinstDLL,
00638         DWORD dwReason,
00639         LPVOID lpReserved)
00640 {
00641     UNREFERENCED_PARAMETER(lpReserved);
00642     switch(dwReason)
00643     {
00644         case DLL_PROCESS_ATTACH:
00645             hApplet = hinstDLL;
00646             DisableThreadLibraryCalls(hinstDLL);
00647             break;
00648     }
00649 
00650     return TRUE;
00651 }

Generated on Sun May 27 2012 04:21:00 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.