-/*
+/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Display Control Panel
* FILE: dll/cpl/desk/advmon.c
return FALSE;
}
-static INT_PTR CALLBACK
-AdvGeneralPageProc(HWND hwndDlg,
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam)
-{
- PDISPLAY_DEVICE_ENTRY DispDevice = NULL;
- INT_PTR Ret = 0;
-
- if (uMsg != WM_INITDIALOG)
- DispDevice = (PDISPLAY_DEVICE_ENTRY)GetWindowLongPtr(hwndDlg, DWLP_USER);
-
- switch (uMsg)
- {
- case WM_INITDIALOG:
- DispDevice = (PDISPLAY_DEVICE_ENTRY)(((LPPROPSHEETPAGE)lParam)->lParam);
- SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)DispDevice);
-
- Ret = TRUE;
- break;
- }
-
- return Ret;
-}
-
-static LPTSTR
-QueryDevSettingsString(IDataObject *pdo, UINT cfFormat)
-{
- FORMATETC fetc;
- STGMEDIUM medium;
- SIZE_T BufLen;
- LPWSTR lpRecvBuffer;
- LPTSTR lpStr = NULL;
-
- fetc.cfFormat = (CLIPFORMAT)cfFormat;
- fetc.ptd = NULL;
- fetc.dwAspect = DVASPECT_CONTENT;
- fetc.lindex = -1;
- fetc.tymed = TYMED_HGLOBAL;
-
- if (SUCCEEDED(IDataObject_GetData(pdo, &fetc, &medium)) && medium.hGlobal != NULL)
- {
- /* We always receive the string in unicode! */
- lpRecvBuffer = (LPWSTR)GlobalLock(medium.hGlobal);
-
- BufLen = wcslen(lpRecvBuffer) + 1;
- lpStr = LocalAlloc(LMEM_FIXED, BufLen * sizeof(TCHAR));
- if (lpStr != NULL)
- {
-#ifdef UNICODE
- wcscpy(lpStr, lpRecvBuffer);
-#else
- WideCharToMultiByte(CP_APC, 0, lpRecvBuffer, -1, lpStr, BufLen, NULL, NULL);
-#endif
- }
-
- GlobalUnlock(medium.hGlobal);
- ReleaseStgMedium(&medium);
- }
-
- return lpStr;
-}
-
static VOID
BuildAdvPropTitle(IDataObject *pdo, LPTSTR lpBuffer, DWORD dwBufferLen)
{
uiMonitorName = RegisterClipboardFormat(DESK_EXT_MONITORNAME);
uiDisplayName = RegisterClipboardFormat(DESK_EXT_DISPLAYNAME);
- lpMonitorName = QueryDevSettingsString(pdo, uiMonitorName);
- lpDisplayName = QueryDevSettingsString(pdo, uiDisplayName);
+ lpMonitorName = QueryDeskCplString(pdo, uiMonitorName);
+ lpDisplayName = QueryDeskCplString(pdo, uiDisplayName);
_sntprintf(lpBuffer, dwBufferLen, szFormatBuff, lpMonitorName, lpDisplayName);
LocalFree((HLOCAL)lpDisplayName);
}
+
+typedef HPSXA (WINAPI * CPSEAE)(HKEY,LPCWSTR,UINT,IDataObject*);
+
BOOL
DisplayAdvancedSettings(HWND hWndParent, PDISPLAY_DEVICE_ENTRY DisplayDevice)
{
HPSXA hpsxaDev, hpsxaDisp;
BOOL Ret;
IDataObject *pdo;
+#ifdef _MSC_VER
+ HMODULE hShell32 = NULL;
+#endif
+ CPSEAE msvc_SHCreatePropSheetExtArrayEx;
+
+ /* silence gcc warning */
+ msvc_SHCreatePropSheetExtArrayEx = NULL;
/* FIXME: Build the "%s and %s" caption string for the monitor and adapter name */
szCaption[0] = _T('\0');
if (pdo != NULL)
BuildAdvPropTitle(pdo, szCaption, sizeof(szCaption) / sizeof(szCaption[0]));
+#ifdef _MSC_VER
+ hShell32 = LoadLibrary(_T("shell32.dll"));
+ if(hShell32 == NULL)
+ return FALSE;
+ msvc_SHCreatePropSheetExtArrayEx = (CPSEAE)GetProcAddress(hShell32, (LPCSTR)194);
+ hpsxaDev = msvc_SHCreatePropSheetExtArrayEx(HKEY_LOCAL_MACHINE, REGSTR_PATH_CONTROLSFOLDER TEXT("\\Device"), MAX_ADVANCED_PAGES - psh.nPages, pdo);
+#else
hpsxaDev = SHCreatePropSheetExtArrayEx(HKEY_LOCAL_MACHINE, REGSTR_PATH_CONTROLSFOLDER TEXT("\\Device"), MAX_ADVANCED_PAGES - psh.nPages, pdo);
+#endif
if (hpsxaDev != NULL)
SHAddFromPropSheetExtArray(hpsxaDev, PropSheetAddPage, (LPARAM)&psh);
+#ifdef _MSC_VER
+ hpsxaDisp = msvc_SHCreatePropSheetExtArrayEx(HKEY_LOCAL_MACHINE, REGSTR_PATH_CONTROLSFOLDER TEXT("\\Device"), MAX_ADVANCED_PAGES - psh.nPages, pdo);
+#else
hpsxaDisp = SHCreatePropSheetExtArrayEx(HKEY_LOCAL_MACHINE, REGSTR_PATH_CONTROLSFOLDER TEXT("\\Display"), MAX_ADVANCED_PAGES - psh.nPages, pdo);
+#endif
if (hpsxaDisp != NULL)
SHAddFromPropSheetExtArray(hpsxaDisp, PropSheetAddPage, (LPARAM)&psh);
IDataObject_Release(pdo);
+#ifdef _MSC_VER
+ if (hShell32)
+ FreeLibrary(hShell32);
+#endif
+
return Ret;
}