From: Vadim Zeitlin <vadim@wxwidgets.org>
Date: Sun, 30 Dec 2001 22:35:14 +0000 (+0000)
Subject: added a few useful utility classes: MemoryHDC and SelectInHDC
X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/091225b4a7317b64d87caa0558eb05afceec3028

added a few useful utility classes: MemoryHDC and SelectInHDC


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13255 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---

diff --git a/include/wx/msw/private.h b/include/wx/msw/private.h
index 1e364e4b3c..e61c66cc7c 100644
--- a/include/wx/msw/private.h
+++ b/include/wx/msw/private.h
@@ -291,14 +291,47 @@ inline RECT wxGetClientRect(HWND hwnd)
 class ScreenHDC
 {
 public:
-    ScreenHDC() { m_hdc = GetDC(NULL);    }
-   ~ScreenHDC() { ReleaseDC(NULL, m_hdc); }
-    operator HDC() const { return m_hdc;  }
+    ScreenHDC() { m_hdc = ::GetDC(NULL);    }
+   ~ScreenHDC() { ::ReleaseDC(NULL, m_hdc); }
+
+    operator HDC() const { return m_hdc; }
+
+private:
+    HDC m_hdc;
+};
+
+// the same as ScreenHDC but for memory DCs: creates the HDC in ctor and
+// destroys it in dtor
+class MemoryHDC
+{
+public:
+    MemoryHDC() { m_hdc = ::CreateCompatibleDC(NULL); }
+   ~MemoryHDC() { ::DeleteObject(m_hdc);              }
+
+    operator HDC() const { return m_hdc; }
 
 private:
     HDC m_hdc;
 };
 
+// a class which selects a GDI object into a DC in its ctor and deselects in
+// dtor
+class SelectInHDC
+{
+public:
+    SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc)
+        { m_hgdiobj = ::SelectObject(hdc, hgdiobj); }
+
+   ~SelectInHDC() { ::SelectObject(m_hdc, m_hgdiobj); }
+
+   // return true if the object was successfully selected
+   operator bool() const { return m_hgdiobj != 0; }
+
+private:
+   HDC m_hdc;
+   HGDIOBJ m_hgdiobj;
+};
+
 // ---------------------------------------------------------------------------
 // macros to make casting between WXFOO and FOO a bit easier: the GetFoo()
 // returns Foo cast to the Windows type for oruselves, while GetFooOf() takes