[KSPROXY]
[reactos.git] / reactos / dll / cpl / desk / advmon.c
index 2b72270..aba9b9a 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS Display Control Panel
  * FILE:            dll/cpl/desk/advmon.c
@@ -48,69 +48,6 @@ InitPropSheetPage(PROPSHEETHEADER *ppsh, WORD idDlg, DLGPROC DlgProc, LPARAM lPa
     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)
 {
@@ -126,8 +63,8 @@ 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);
 
@@ -137,6 +74,9 @@ BuildAdvPropTitle(IDataObject *pdo, LPTSTR lpBuffer, DWORD dwBufferLen)
         LocalFree((HLOCAL)lpDisplayName);
 }
 
+
+typedef HPSXA (WINAPI * CPSEAE)(HKEY,LPCWSTR,UINT,IDataObject*);
+
 BOOL
 DisplayAdvancedSettings(HWND hWndParent, PDISPLAY_DEVICE_ENTRY DisplayDevice)
 {
@@ -146,6 +86,13 @@ 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');
@@ -165,11 +112,23 @@ DisplayAdvancedSettings(HWND hWndParent, PDISPLAY_DEVICE_ENTRY DisplayDevice)
     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);
 
@@ -183,5 +142,10 @@ DisplayAdvancedSettings(HWND hWndParent, PDISPLAY_DEVICE_ENTRY DisplayDevice)
 
     IDataObject_Release(pdo);
 
+#ifdef _MSC_VER
+    if (hShell32)
+        FreeLibrary(hShell32);
+#endif
+
     return Ret;
 }