X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a1372ae2fa6471b0dbe4d37fbe09076d2ea97b89..48f7ffbe93ab587c54643e2476b0e3b0c74e1386:/include/wx/msw/private.h diff --git a/include/wx/msw/private.h b/include/wx/msw/private.h index 1b4729ab22..a7f98d9804 100644 --- a/include/wx/msw/private.h +++ b/include/wx/msw/private.h @@ -28,6 +28,7 @@ class WXDLLEXPORT wxFont; class WXDLLEXPORT wxWindow; +class WXDLLEXPORT wxWindowBase; // --------------------------------------------------------------------------- // private constants @@ -187,7 +188,7 @@ extern LONG APIENTRY _EXPORT || defined(__BORLANDC__) \ || defined(__DMC__) \ || defined(__WATCOMC__) \ - || (defined(__GNUWIN32__) || defined(__MINGW32__)) \ + || defined(__MINGW32__) \ || (defined(__MWERKS__) && defined(__MSL__)) #define wxGetOSFHandle(fd) ((HANDLE)_get_osfhandle(fd)) #endif @@ -244,15 +245,26 @@ struct WXDLLEXPORT wxCOLORMAP extern wxCOLORMAP *wxGetStdColourMap(); // create a wxRect from Windows RECT -inline wxRect wxRectFromRECT(const RECT& r) +inline wxRect wxRectFromRECT(const RECT& rc) { - return wxRect(r.left, r.top, r.right - r.left, r.bottom - r.top); + return wxRect(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); } // copy Windows RECT to our wxRect -inline void wxCopyRECTToRect(const RECT& r, wxRect& rect) +inline void wxCopyRECTToRect(const RECT& rc, wxRect& rect) { - rect = wxRectFromRECT(r); + rect = wxRectFromRECT(rc); +} + +// and vice versa +inline void wxCopyRectToRECT(const wxRect& rect, RECT& rc) +{ + // note that we don't use wxRect::GetRight() as it is one of compared to + // wxRectFromRECT() above + rc.top = rect.y; + rc.left = rect.x; + rc.right = rect.x + rect.width; + rc.bottom = rect.y + rect.height; } // translations between HIMETRIC units (which OLE likes) and pixels (which are @@ -428,16 +440,53 @@ private: HGDIOBJ m_gdiobj; }; -// a class for temporary bitmaps -class CompatibleBitmap : private AutoGDIObject +// TODO: all this asks for using a AutoHandler template... + +// a class for temporary pens +class AutoHBRUSH : private AutoGDIObject +{ +public: + AutoHBRUSH(COLORREF col) + : AutoGDIObject(::CreateSolidBrush(col)) { } + + operator HBRUSH() const { return (HBRUSH)GetObject(); } +}; + +// a class for temporary pens +class AutoHPEN : private AutoGDIObject +{ +public: + AutoHPEN(COLORREF col) + : AutoGDIObject(::CreatePen(PS_SOLID, 0, col)) { } + + operator HPEN() const { return (HPEN)GetObject(); } +}; + +// classes for temporary bitmaps +class AutoHBITMAP : private AutoGDIObject +{ +public: + AutoHBITMAP(HBITMAP hbmp) : AutoGDIObject(hbmp) { } + + operator HBITMAP() const { return (HBITMAP)GetObject(); } +}; + +class CompatibleBitmap : public AutoHBITMAP { public: CompatibleBitmap(HDC hdc, int w, int h) - : AutoGDIObject(::CreateCompatibleBitmap(hdc, w, h)) + : AutoHBITMAP(::CreateCompatibleBitmap(hdc, w, h)) { } +}; - operator HBITMAP() const { return (HBITMAP)GetObject(); } +class MonoBitmap : public AutoHBITMAP +{ +public: + MonoBitmap(int w, int h) + : AutoHBITMAP(::CreateBitmap(w, h, 1, 1, 0)) + { + } }; // class automatically destroys the region object @@ -652,6 +701,43 @@ inline wxString wxGetFullModuleName() return wxGetFullModuleName((HMODULE)wxGetInstance()); } +// return the run-time version of the OS in a format similar to +// WINVER/_WIN32_WINNT compile-time macros: +// +// 0x0300 Windows NT 3.51 +// 0x0400 Windows 95, NT4 +// 0x0410 Windows 98 +// 0x0500 Windows ME, 2000 +// 0x0501 Windows XP +// 0x0502 Windows 2003 +// 0x0600 Longhorn +// +// for the other Windows versions 0 is currently returned +enum wxWinVersion +{ + wxWinVersion_Unknown = 0, + + wxWinVersion_3 = 0x0300, + wxWinVersion_NT3 = wxWinVersion_3, + + wxWinVersion_4 = 0x0400, + wxWinVersion_95 = wxWinVersion_4, + wxWinVersion_NT4 = wxWinVersion_4, + wxWinVersion_98 = 0x0410, + + wxWinVersion_5 = 0x0500, + wxWinVersion_ME = wxWinVersion_5, + wxWinVersion_NT5 = wxWinVersion_5, + wxWinVersion_2000 = wxWinVersion_5, + wxWinVersion_XP = 0x0501, + wxWinVersion_2003 = 0x0502, + + wxWinVersion_6 = 0x0600, + wxWinVersion_NT6 = 0x0600 +}; + +WXDLLIMPEXP_BASE wxWinVersion wxGetWinVersion(); + #if wxUSE_GUI // cursor stuff @@ -690,6 +776,9 @@ 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 // ---------------------------------------------------------------------------- @@ -711,6 +800,14 @@ extern WXDLLEXPORT wxSize wxGetHiconSize(HICON hicon); // Lines are drawn differently for WinCE and regular WIN32 WXDLLEXPORT void wxDrawLine(HDC hdc, int x1, int y1, int x2, int y2); +// fill the client rect of the given window on the provided dc using this brush +inline void wxFillRect(HWND hwnd, HDC hdc, HBRUSH hbr) +{ + RECT rc; + ::GetClientRect(hwnd, &rc); + ::FillRect(hdc, &rc, hbr); +} + // ---------------------------------------------------------------------------- // 32/64 bit helpers // ----------------------------------------------------------------------------