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

advmon.c
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:       See COPYING in the top level directory
00003  * PROJECT:         ReactOS Display Control Panel
00004  * FILE:            dll/cpl/desk/advmon.c
00005  * PURPOSE:         Advanced monitor/display settings
00006  */
00007 
00008 #include "desk.h"
00009 
00010 #define MAX_ADVANCED_PAGES  32
00011 
00012 static BOOL CALLBACK
00013 PropSheetAddPage(HPROPSHEETPAGE hpage, LPARAM lParam)
00014 {
00015     PROPSHEETHEADER *ppsh = (PROPSHEETHEADER *)lParam;
00016     if (ppsh != NULL && ppsh->nPages < MAX_ADVANCED_PAGES)
00017     {
00018         ppsh->phpage[ppsh->nPages++] = hpage;
00019         return TRUE;
00020     }
00021 
00022     return FALSE;
00023 }
00024 
00025 static BOOL
00026 InitPropSheetPage(PROPSHEETHEADER *ppsh, WORD idDlg, DLGPROC DlgProc, LPARAM lParam)
00027 {
00028     HPROPSHEETPAGE hPage;
00029     PROPSHEETPAGE psp;
00030 
00031     if (ppsh->nPages < MAX_ADVANCED_PAGES)
00032     {
00033         ZeroMemory(&psp, sizeof(psp));
00034         psp.dwSize = sizeof(psp);
00035         psp.dwFlags = PSP_DEFAULT;
00036         psp.hInstance = hApplet;
00037         psp.pszTemplate = MAKEINTRESOURCE(idDlg);
00038         psp.pfnDlgProc = DlgProc;
00039         psp.lParam = lParam;
00040 
00041         hPage = CreatePropertySheetPage(&psp);
00042         if (hPage != NULL)
00043         {
00044             return PropSheetAddPage(hPage, (LPARAM)ppsh);
00045         }
00046     }
00047 
00048     return FALSE;
00049 }
00050 
00051 static VOID
00052 BuildAdvPropTitle(IDataObject *pdo, LPTSTR lpBuffer, DWORD dwBufferLen)
00053 {
00054     UINT uiMonitorName, uiDisplayName;
00055     LPTSTR lpMonitorName, lpDisplayName;
00056     TCHAR szFormatBuff[32];
00057 
00058     if (!LoadString(hApplet, IDS_ADVANCEDTITLEFMT, szFormatBuff, sizeof(szFormatBuff) / sizeof(szFormatBuff[0])))
00059     {
00060         szFormatBuff[0] = _T('\0');
00061     }
00062 
00063     uiMonitorName = RegisterClipboardFormat(DESK_EXT_MONITORNAME);
00064     uiDisplayName = RegisterClipboardFormat(DESK_EXT_DISPLAYNAME);
00065 
00066     lpMonitorName = QueryDeskCplString(pdo, uiMonitorName);
00067     lpDisplayName = QueryDeskCplString(pdo, uiDisplayName);
00068 
00069     _sntprintf(lpBuffer, dwBufferLen, szFormatBuff, lpMonitorName, lpDisplayName);
00070 
00071     if (lpMonitorName != NULL)
00072         LocalFree((HLOCAL)lpMonitorName);
00073     if (lpDisplayName != NULL)
00074         LocalFree((HLOCAL)lpDisplayName);
00075 }
00076 
00077 
00078 typedef HPSXA (WINAPI * CPSEAE)(HKEY,LPCWSTR,UINT,IDataObject*);
00079 
00080 BOOL
00081 DisplayAdvancedSettings(HWND hWndParent, PDISPLAY_DEVICE_ENTRY DisplayDevice)
00082 {
00083     TCHAR szCaption[128];
00084     HPROPSHEETPAGE hpsp[MAX_ADVANCED_PAGES];
00085     PROPSHEETHEADER psh;
00086     HPSXA hpsxaDev, hpsxaDisp;
00087     BOOL Ret;
00088     IDataObject *pdo;
00089 #ifdef _MSC_VER
00090     HMODULE hShell32 = NULL;
00091     CPSEAE msvc_SHCreatePropSheetExtArrayEx;
00092 #endif
00093 
00094     /* FIXME: Build the "%s and %s" caption string for the monitor and adapter name */
00095     szCaption[0] = _T('\0');
00096 
00097     ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
00098     psh.dwSize = sizeof(PROPSHEETHEADER);
00099     psh.dwFlags =  PSH_PROPTITLE;
00100     psh.hwndParent = hWndParent;
00101     psh.hInstance = hApplet;
00102     psh.pszCaption = szCaption;
00103     psh.phpage = hpsp;
00104 
00105     InitPropSheetPage(&psh, IDD_ADVANCED_GENERAL, AdvGeneralPageProc, (LPARAM)DisplayDevice);
00106 
00107     pdo = CreateDevSettings(DisplayDevice);
00108 
00109     if (pdo != NULL)
00110         BuildAdvPropTitle(pdo, szCaption, sizeof(szCaption) / sizeof(szCaption[0]));
00111 
00112 #ifdef _MSC_VER
00113     hShell32 = LoadLibrary(_T("shell32.dll"));
00114     if(hShell32 == NULL)
00115         return FALSE;
00116     msvc_SHCreatePropSheetExtArrayEx = (CPSEAE)GetProcAddress(hShell32, (LPCSTR)194);
00117     hpsxaDev = msvc_SHCreatePropSheetExtArrayEx(HKEY_LOCAL_MACHINE, REGSTR_PATH_CONTROLSFOLDER TEXT("\\Device"), MAX_ADVANCED_PAGES - psh.nPages, pdo);
00118 #else
00119     hpsxaDev = SHCreatePropSheetExtArrayEx(HKEY_LOCAL_MACHINE, REGSTR_PATH_CONTROLSFOLDER TEXT("\\Device"), MAX_ADVANCED_PAGES - psh.nPages, pdo);
00120 #endif
00121     if (hpsxaDev != NULL)
00122       SHAddFromPropSheetExtArray(hpsxaDev, PropSheetAddPage, (LPARAM)&psh);
00123 
00124 #ifdef _MSC_VER
00125     hpsxaDisp = msvc_SHCreatePropSheetExtArrayEx(HKEY_LOCAL_MACHINE, REGSTR_PATH_CONTROLSFOLDER TEXT("\\Device"), MAX_ADVANCED_PAGES - psh.nPages, pdo);
00126 #else
00127     hpsxaDisp = SHCreatePropSheetExtArrayEx(HKEY_LOCAL_MACHINE, REGSTR_PATH_CONTROLSFOLDER TEXT("\\Display"), MAX_ADVANCED_PAGES - psh.nPages, pdo);
00128 #endif
00129     if (hpsxaDisp != NULL)
00130       SHAddFromPropSheetExtArray(hpsxaDisp, PropSheetAddPage, (LPARAM)&psh);
00131 
00132     Ret = (LONG)(PropertySheet(&psh) != -1);
00133 
00134     if (hpsxaDisp != NULL)
00135         SHDestroyPropSheetExtArray(hpsxaDisp);
00136 
00137     if (hpsxaDev != NULL)
00138         SHDestroyPropSheetExtArray(hpsxaDev);
00139 
00140     IDataObject_Release(pdo);
00141 
00142 #ifdef _MSC_VER
00143     if (hShell32)
00144         FreeLibrary(hShell32);
00145 #endif
00146 
00147     return Ret;
00148 }

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