X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/025f7d775c8366dec72258e0d9d83848203c4871..8ce68f7fc03beda6b7cbfdd7180a8f7f7eee952d:/include/wx/msw/private.h diff --git a/include/wx/msw/private.h b/include/wx/msw/private.h index f31355f2cb..4bed1f04b8 100644 --- a/include/wx/msw/private.h +++ b/include/wx/msw/private.h @@ -597,7 +597,7 @@ private: HDCMapModeChanger wxMAKE_UNIQUE_NAME(wxHDCMapModeChanger)(hdc, mm) #endif // __WXWINCE__/!__WXWINCE__ -// smart buffeer using GlobalAlloc/GlobalFree() +// smart pointer using GlobalAlloc/GlobalFree() class GlobalPtr { public: @@ -630,16 +630,36 @@ private: 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_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; + + // NB: GlobalLock() is a macro, not a function, hence don't use the + // global scope operator with it (and neither with GlobalUnlock()) m_ptr = GlobalLock(hGlobal); if ( !m_ptr ) wxLogLastError(_T("GlobalLock")); } + // initialize the object, HGLOBAL must not be NULL + GlobalPtrLock(HGLOBAL hGlobal) + { + Init(hGlobal); + } + ~GlobalPtrLock() { - if ( !GlobalUnlock(m_hGlobal) ) + if ( m_hGlobal && !GlobalUnlock(m_hGlobal) ) { #ifdef __WXDEBUG__ // this might happen simply because the block became unlocked @@ -652,6 +672,7 @@ public: } } + void *Get() const { return m_ptr; } operator void *() const { return m_ptr; } private: @@ -883,9 +904,15 @@ inline bool wxStyleHasBorder(long style) // functions mapping HWND to wxWindow // ---------------------------------------------------------------------------- -// this function simply checks whether the given hWnd corresponds to a wxWindow +// this function simply checks whether the given hwnd corresponds to a wxWindow // and returns either that window if it does or NULL otherwise -extern WXDLLEXPORT wxWindow* wxFindWinFromHandle(WXHWND hWnd); +extern WXDLLEXPORT wxWindow* wxFindWinFromHandle(HWND hwnd); + +// without STRICT WXHWND is the same as HWND anyhow +inline wxWindow* wxFindWinFromHandle(WXHWND hWnd) +{ + return wxFindWinFromHandle(wx_static_cast(HWND, hWnd)); +} // find the window for HWND which is part of some wxWindow, i.e. unlike // wxFindWinFromHandle() above it will also work for "sub controls" of a