Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenadvmon.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
1.7.6.1
|