]> git.saurik.com Git - wxWidgets.git/commitdiff
use GlobalPtrLock (modified to allow not initializing it if the ptr is NULL) in wxGet...
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 28 Feb 2008 00:41:38 +0000 (00:41 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 28 Feb 2008 00:41:38 +0000 (00:41 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52164 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/private.h
src/msw/dcprint.cpp

index f31355f2cbc7f5356053d5c0884fde0e8435aeb5..892d81c6065134e2d410457f5f099452efe285ab 100644 (file)
@@ -630,16 +630,33 @@ private:
 class GlobalPtrLock
 {
 public:
 class GlobalPtrLock
 {
 public:
-    GlobalPtrLock(HGLOBAL hGlobal) : m_hGlobal(hGlobal)
+    // default ctor, use Init() later -- should only be used if the HGLOBAL can
+    // be NULL (in which case Init() shouldn't be called)
+    GlobalPtrLock()
     {
     {
-        m_ptr = GlobalLock(hGlobal);
+        m_hGlobal = NULL;
+        m_ptr = NULL;
+    }
+
+    // initialize the object, may be only called if we were created using the
+    // default ctor; HGLOBAL must not be NULL
+    void Init(HGLOBAL hGlobal)
+    {
+        m_hGlobal = hGlobal;
+        m_ptr = ::GlobalLock(hGlobal);
         if ( !m_ptr )
             wxLogLastError(_T("GlobalLock"));
     }
 
         if ( !m_ptr )
             wxLogLastError(_T("GlobalLock"));
     }
 
+    // initialize the object, HGLOBAL must not be NULL
+    GlobalPtrLock(HGLOBAL hGlobal)
+    {
+        Init(hGlobal);
+    }
+
     ~GlobalPtrLock()
     {
     ~GlobalPtrLock()
     {
-        if ( !GlobalUnlock(m_hGlobal) )
+        if ( m_hGlobal && !::GlobalUnlock(m_hGlobal) )
         {
 #ifdef __WXDEBUG__
             // this might happen simply because the block became unlocked
         {
 #ifdef __WXDEBUG__
             // this might happen simply because the block became unlocked
@@ -652,6 +669,7 @@ public:
         }
     }
 
         }
     }
 
+    void *Get() const { return m_ptr; }
     operator void *() const { return m_ptr; }
 
 private:
     operator void *() const { return m_ptr; }
 
 private:
index 628e6e81b2217364fed0c46add04d756739c6603..7eac01116f3b85fef2dfc527d0a0bbaa15df18fe 100644 (file)
@@ -327,17 +327,21 @@ WXHDC WXDLLEXPORT wxGetPrinterDC(const wxPrintData& printDataConst)
     }
 
 
     }
 
 
-    HGLOBAL hDevMode = (HGLOBAL)(DWORD) data->GetDevMode();
-
-    DEVMODE *lpDevMode = hDevMode ? (DEVMODE *)::GlobalLock(hDevMode) : NULL;
-
-    HDC hDC = ::CreateDC(NULL, deviceName.wx_str(), NULL, lpDevMode);
+    GlobalPtrLock lockDevMode;
+    const HGLOBAL devMode = data->GetDevMode();
+    if ( devMode )
+        lockDevMode.Init(devMode);
+
+    HDC hDC = ::CreateDC
+                (
+                    NULL,               // no driver name as we use device name
+                    deviceName.wx_str(),
+                    NULL,               // unused
+                    wx_static_cast(DEVMODE *, lockDevMode.Get())
+                );
     if ( !hDC )
         wxLogLastError(_T("CreateDC(printer)"));
 
     if ( !hDC )
         wxLogLastError(_T("CreateDC(printer)"));
 
-    if ( lpDevMode )
-        ::GlobalUnlock(hDevMode);
-
     return (WXHDC) hDC;
 #endif // PostScript/Windows printing
 }
     return (WXHDC) hDC;
 #endif // PostScript/Windows printing
 }