X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0cdd4e199e078e34076b7f28ea65be81ffb7960c..0c06c9839c0ca2f5857ed336bcbfd98031f97f08:/include/wx/msw/private.h?ds=sidebyside diff --git a/include/wx/msw/private.h b/include/wx/msw/private.h index 9489b2fd68..c1b5e3e4cf 100644 --- a/include/wx/msw/private.h +++ b/include/wx/msw/private.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: private.h +// Name: wx/msw/private.h // Purpose: Private declarations: as this header is only included by // wxWidgets itself, it may contain identifiers which don't start // with "wx". @@ -108,22 +108,6 @@ extern WXDLLIMPEXP_DATA_BASE(HINSTANCE) wxhInstance; #endif #endif -#if wxUSE_PENWIN - WXDLLEXPORT void wxRegisterPenWin(); - WXDLLEXPORT void wxCleanUpPenWin(); - WXDLLEXPORT void wxEnablePenAppHooks (bool hook); -#endif // wxUSE_PENWIN - -#if wxUSE_ITSY_BITSY - #define IBS_HORZCAPTION 0x4000L - #define IBS_VERTCAPTION 0x8000L - - UINT WINAPI ibGetCaptionSize( HWND hWnd ) ; - UINT WINAPI ibSetCaptionSize( HWND hWnd, UINT nSize ) ; - LRESULT WINAPI ibDefWindowProc( HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam ) ; - VOID WINAPI ibAdjustWindowRect( HWND hWnd, LPRECT lprc ) ; -#endif // wxUSE_ITSY_BITSY - /* * Decide what window classes we're going to use * for this combination of CTl3D/FAFA settings @@ -208,10 +192,26 @@ protected: HANDLE m_handle; }; +// a template to make initializing Windows styructs less painful: it zeroes all +// the struct fields and also sets cbSize member to the correct value (and so +// can be only used with structures which have this member...) +template +struct WinStruct : public T +{ + WinStruct() + { + ::ZeroMemory(this, sizeof(T)); + + // explicit qualification is required here for this to be valid C++ + this->cbSize = sizeof(T); + } +}; + + #if wxUSE_GUI -#include -#include +#include "wx/gdicmn.h" +#include "wx/colour.h" // make conversion from wxColour and COLORREF a bit less painful inline COLORREF wxColourToRGB(const wxColour& c) @@ -358,22 +358,6 @@ inline RECT wxGetClientRect(HWND hwnd) // small helper classes // --------------------------------------------------------------------------- -// a template to make initializing Windows styructs less painful: it zeroes all -// the struct fields and also sets cbSize member to the correct value (and so -// can be only used with structures which have this member...) -template -struct WinStruct : public T -{ - WinStruct() - { - ::ZeroMemory(this, sizeof(T)); - - // explicit qualification is required here for this to be valid C++ - this->cbSize = sizeof(T); - } -}; - - // create an instance of this class and use it as the HDC for screen, will // automatically release the DC going out of scope class ScreenHDC @@ -535,13 +519,75 @@ private: DECLARE_NO_COPY_CLASS(HDCClipper) }; +// set the given map mode for the life time of this object +// +// NB: SetMapMode() is not supported by CE so we also define a helper macro +// to avoid using it there +#ifdef __WXWINCE__ + #define wxCHANGE_HDC_MAP_MODE(hdc, mm) +#else // !__WXWINCE__ + class HDCMapModeChanger + { + public: + HDCMapModeChanger(HDC hdc, int mm) + : m_hdc(hdc) + { + m_modeOld = ::SetMapMode(hdc, mm); + if ( !m_modeOld ) + wxLogLastError(_T("SelectClipRgn")); + } + + ~HDCMapModeChanger() + { + if ( m_modeOld ) + ::SetMapMode(m_hdc, m_modeOld); + } + + private: + HDC m_hdc; + int m_modeOld; + + DECLARE_NO_COPY_CLASS(HDCMapModeChanger) + }; + + #define wxCHANGE_HDC_MAP_MODE(hdc, mm) \ + HDCMapModeChanger wxMAKE_UNIQUE_NAME(wxHDCMapModeChanger)(hdc, mm) +#endif // __WXWINCE__/!__WXWINCE__ + +// 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 ) @@ -550,7 +596,7 @@ public: } } - ~GlobalPtr() + ~GlobalPtrLock() { if ( !GlobalUnlock(m_hGlobal) ) { @@ -571,7 +617,7 @@ private: 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 @@ -791,9 +837,6 @@ inline bool wxStyleHasBorder(long style) 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 // ---------------------------------------------------------------------------- @@ -851,38 +894,28 @@ inline void *wxSetWindowUserData(HWND hwnd, void *data) #else // __WIN32__ -#ifdef __VISUALC__ - // strangely enough, VC++ 7.1 gives warnings about 32 -> 64 bit conversions - // in the functions below, even in spite of the explicit casts - #pragma warning(disable:4311) - #pragma warning(disable:4312) -#endif - -inline void *wxGetWindowProc(HWND hwnd) +// note that the casts to LONG_PTR here are required even on 32-bit machines +// for the 64-bit warning mode of later versions of MSVC (C4311/4312) +inline WNDPROC wxGetWindowProc(HWND hwnd) { - return (void *)::GetWindowLong(hwnd, GWL_WNDPROC); + return (WNDPROC)(LONG_PTR)::GetWindowLong(hwnd, GWL_WNDPROC); } inline void *wxGetWindowUserData(HWND hwnd) { - return (void *)::GetWindowLong(hwnd, GWL_USERDATA); + return (void *)(LONG_PTR)::GetWindowLong(hwnd, GWL_USERDATA); } inline WNDPROC wxSetWindowProc(HWND hwnd, WNDPROC func) { - return (WNDPROC)::SetWindowLong(hwnd, GWL_WNDPROC, (LONG)func); + return (WNDPROC)(LONG_PTR)::SetWindowLong(hwnd, GWL_WNDPROC, (LONG_PTR)func); } inline void *wxSetWindowUserData(HWND hwnd, void *data) { - return (void *)::SetWindowLong(hwnd, GWL_USERDATA, (LONG)data); + return (void *)(LONG_PTR)::SetWindowLong(hwnd, GWL_USERDATA, (LONG_PTR)data); } -#ifdef __VISUALC__ - #pragma warning(default:4311) - #pragma warning(default:4312) -#endif - #endif // __WIN64__/__WIN32__ #endif // wxUSE_GUI