-typedef BOOL (PASCAL *DDEnumExCallback_t)(GUID *pGuid,
- LPTSTR driverDescription,
- LPTSTR driverName,
- LPVOID lpContext,
- HMONITOR hmon);
-
-typedef HRESULT (WINAPI *DirectDrawEnumerateEx_t)(DDEnumExCallback_t lpCallback,
- LPVOID lpContext,
- DWORD dwFlags);
-
-typedef HRESULT (WINAPI *DirectDrawCreate_t)(GUID *lpGUID,
- LPDIRECTDRAW *lplpDD,
- IUnknown *pUnkOuter);
-
-// ----------------------------------------------------------------------------
-// private classes
-// ----------------------------------------------------------------------------
-
-class wxDisplayInfo
-{
-public:
- // handle of this monitor used by MonitorXXX() functions, never NULL
- HMONITOR m_hmon;
-
- // IDirectDraw object used to control this display, may be NULL
- IDirectDraw2 *m_pDD2;
-
- // DirectDraw GUID for this display, only valid when using DirectDraw
- GUID m_guid;
-
- // the entire area of this monitor in virtual screen coordinates
- wxRect m_rect;
-
- // the display device name for this monitor, empty initially and retrieved
- // on demand by DoGetName()
- wxString m_devName;
-
- wxDisplayInfo() { m_hmon = NULL; m_pDD2 = NULL; }
- ~wxDisplayInfo() { if ( m_pDD2 ) m_pDD2->Release(); }
-};
-
-WX_DECLARE_OBJARRAY(wxDisplayInfo, wxDisplayInfoArray);
-#include "wx/arrimpl.cpp"
-WX_DEFINE_OBJARRAY(wxDisplayInfoArray);
-
-// this module is used to cleanup gs_displays array
-class wxDisplayModule : public wxModule
-{
-public:
- virtual bool OnInit() { return true; }
- virtual void OnExit();
-
- DECLARE_DYNAMIC_CLASS(wxDisplayModule)
-};
-
-IMPLEMENT_DYNAMIC_CLASS(wxDisplayModule, wxModule)
-
-// ----------------------------------------------------------------------------
-// globals
-// ----------------------------------------------------------------------------
-
-// do we use DirectX?
-static bool gs_useDirectX = false;
-
-// dynamically resolved DirectDrawCreate()
-static DirectDrawCreate_t gs_DirectDrawCreate = NULL;
-
-// this is not really MT-unsafe as wxDisplay is only going to be used from the
-// main thread, i.e. we consider that it's a GUI class and so don't protect it
-static wxDisplayInfoArray *gs_displays = NULL;
-
-// ===========================================================================
-// implementation
-// ===========================================================================
-
-// ----------------------------------------------------------------------------
-// callbacks for monitor/modes enumeration stuff
-// ----------------------------------------------------------------------------
-
-static BOOL CALLBACK wxmswMonitorEnumProc (
- HMONITOR hMonitor, // handle to display monitor
- HDC WXUNUSED(hdcMonitor), // handle to monitor-appropriate device context
- LPRECT lprcMonitor, // pointer to monitor intersection rectangle
- LPARAM WXUNUSED(dwData) // data passed from EnumDisplayMonitors (unused)
-)
-{
- wxDisplayInfo *info = new wxDisplayInfo();
-
- // we need hMonitor to be able to map display id to it which is needed for
- // MonitorXXX() functions, in particular MonitorFromPoint()
- info->m_hmon = hMonitor;
-
- // we also store the display geometry
- info->m_rect.SetX ( lprcMonitor->left );
- info->m_rect.SetY ( lprcMonitor->top );
- info->m_rect.SetWidth ( lprcMonitor->right - lprcMonitor->left );
- info->m_rect.SetHeight ( lprcMonitor->bottom - lprcMonitor->top );
-
- // now add this monitor to the array
- gs_displays->Add(info);