DECLARE_NO_COPY_CLASS(HDCClipper)
};
+// smart buffeer using GlobalAlloc/GlobalFree()
+class GlobalPtr
+{
+public:
+ // allocates a block of given size
+ GlobalPtr(size_t size, unsigned flags = GMEM_MOVEABLE)
+ {
+ m_hGlobal = ::GlobalAlloc(flags, size);
+ if ( !m_hGlobal )
+ wxLogLastError(_T("GlobalAlloc"));
+ }
+
+ ~GlobalPtr()
+ {
+ if ( m_hGlobal && ::GlobalFree(m_hGlobal) )
+ wxLogLastError(_T("GlobalFree"));
+ }
+
+ // implicit conversion
+ operator HGLOBAL() const { return m_hGlobal; }
+
+private:
+ HGLOBAL m_hGlobal;
+
+ DECLARE_NO_COPY_CLASS(GlobalPtr)
+};
+
// when working with global pointers (which is unfortunately still necessary
// sometimes, e.g. for clipboard) it is important to unlock them exactly as
// many times as we lock them which just asks for using a "smart lock" class
-class GlobalPtr
+class GlobalPtrLock
{
public:
- GlobalPtr(HGLOBAL hGlobal) : m_hGlobal(hGlobal)
+ GlobalPtrLock(HGLOBAL hGlobal) : m_hGlobal(hGlobal)
{
m_ptr = GlobalLock(hGlobal);
if ( !m_ptr )
}
}
- ~GlobalPtr()
+ ~GlobalPtrLock()
{
if ( !GlobalUnlock(m_hGlobal) )
{
HGLOBAL m_hGlobal;
void *m_ptr;
- DECLARE_NO_COPY_CLASS(GlobalPtr)
+ DECLARE_NO_COPY_CLASS(GlobalPtrLock)
};
// register the class when it is first needed and unregister it in dtor
wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0;
}
-// Deferred window moving
-bool wxMoveWindowDeferred(HDWP& hdwp, wxWindowBase* win, HWND hWnd, int x, int y, int width, int height);
-
// ----------------------------------------------------------------------------
// functions mapping HWND to wxWindow
// ----------------------------------------------------------------------------