]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/display.cpp
fixed stub code compilation (don't use PSYMBOL_INFO)
[wxWidgets.git] / src / msw / display.cpp
index 4ba49adf6238d99dbd13c64a4aa6190eb1c357e6..6066895d21acba7595063ec1b6686b261db783fb 100644 (file)
@@ -3,10 +3,11 @@
 // Purpose:     MSW Implementation of wxDisplay class
 // Author:      Royce Mitchell III
 // Modified by: VZ (resolutions enumeration/change support, DirectDraw, ...)
+//                 Ryan Norton (IsPrimary override)
 // Created:     06/21/02
 // RCS-ID:      $Id$
 // Copyright:   (c) wxWidgets team
-// Licence:     wxWidgets licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // ===========================================================================
     #pragma warning(disable:4706)
 #endif
 
+// with mingw32, we must include windows.h first and it doesn't hurt with other
+// compilers
+#include <windows.h>
+
 #include <multimon.h>
 
 #ifdef _MSC_VER
@@ -216,7 +221,7 @@ wxDDEnumExCallback(GUID *pGuid,
     return true;
 }
 
-HRESULT WINAPI wxDDEnumModesCallback(LPDDSURFACEDESC lpDDSurfaceDesc,  
+HRESULT WINAPI wxDDEnumModesCallback(LPDDSURFACEDESC lpDDSurfaceDesc,
                                      LPVOID lpContext)
 {
     // we need at least the mode size
@@ -242,12 +247,16 @@ HRESULT WINAPI wxDDEnumModesCallback(LPDDSURFACEDESC lpDDSurfaceDesc,
 // initialize gs_displays using DirectX functions
 static bool DoInitDirectX()
 {
+#if wxUSE_LOG
     // suppress the errors if ddraw.dll is not found
     wxLog::EnableLogging(false);
+#endif
 
     wxDynamicLibrary dllDX(_T("ddraw.dll"));
 
-    wxLog::EnableLogging(true);
+#if wxUSE_LOG
+    wxLog::EnableLogging();
+#endif
 
     if ( !dllDX.IsLoaded() )
         return false;
@@ -540,6 +549,30 @@ wxString wxDisplay::GetNameForEnumSettings() const
     return name;
 }
 
+// ----------------------------------------------------------------------------
+// determine if this is the primary display
+// ----------------------------------------------------------------------------
+
+bool wxDisplay::IsPrimary() const
+{
+    wxDisplayInfo& dpyInfo = (*gs_displays)[m_index];
+
+    MONITORINFOEX monInfo;
+    wxZeroMemory(monInfo);
+    monInfo.cbSize = sizeof(monInfo);
+
+    // NB: Cast from MONITORINFOEX* to MONITORINFO* is done because
+    //     Mingw headers - unlike the ones from Microsoft's Platform SDK -
+    //     don't derive the former from the latter in C++ mode and so
+    //     the pointer's type is not converted implicitly.
+    if ( !::GetMonitorInfo(dpyInfo.m_hmon, (LPMONITORINFO)&monInfo) )
+    {
+        wxLogLastError(_T("GetMonitorInfo"));
+    }
+
+    return (monInfo.dwFlags & MONITORINFOF_PRIMARY) == MONITORINFOF_PRIMARY;
+}
+
 // ----------------------------------------------------------------------------
 // video modes enumeration
 // ----------------------------------------------------------------------------
@@ -654,7 +687,7 @@ bool wxDisplay::DoChangeModeDirectX(const wxVideoMode& mode)
         return false;
     }
 
-         
+
     return true;
 }