X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9804c4d95c3c8abb492e24f5f7e989016fee53f1..ac43092b9d4f932c3a911fca29f51de3fe094d7c:/include/wx/msw/private.h diff --git a/include/wx/msw/private.h b/include/wx/msw/private.h index dd0bd996a3..7944e1b976 100644 --- a/include/wx/msw/private.h +++ b/include/wx/msw/private.h @@ -21,14 +21,11 @@ #include "wx/msw/microwin.h" #endif -// Include fixes for MSLU: -#include "wx/msw/mslu.h" - #include "wx/log.h" -class WXDLLEXPORT wxFont; -class WXDLLEXPORT wxWindow; -class WXDLLEXPORT wxWindowBase; +class WXDLLIMPEXP_FWD_CORE wxFont; +class WXDLLIMPEXP_FWD_CORE wxWindow; +class WXDLLIMPEXP_FWD_CORE wxWindowBase; // --------------------------------------------------------------------------- // private constants @@ -166,6 +163,7 @@ extern LONG APIENTRY _EXPORT // Intel, Visual Age. #if defined(__WXWINCE__) #define wxGetOSFHandle(fd) ((HANDLE)fd) + #define wxOpenOSFHandle(h, flags) ((int)wxPtrToUInt(h)) #elif defined(__CYGWIN__) #define wxGetOSFHandle(fd) ((HANDLE)get_osfhandle(fd)) #elif defined(__VISUALC__) \ @@ -175,6 +173,8 @@ extern LONG APIENTRY _EXPORT || defined(__MINGW32__) \ || (defined(__MWERKS__) && defined(__MSL__)) #define wxGetOSFHandle(fd) ((HANDLE)_get_osfhandle(fd)) + #define wxOpenOSFHandle(h, flags) (_open_osfhandle(wxPtrToUInt(h), flags)) + #define wx_fdopen _fdopen #endif // close the handle in the class dtor @@ -213,6 +213,11 @@ struct WinStruct : public T #include "wx/gdicmn.h" #include "wx/colour.h" +#include "wx/msw/dc.h" +#include "wx/msw/dcclient.h" +#include "wx/msw/dcmemory.h" + + // make conversion from wxColour and COLORREF a bit less painful inline COLORREF wxColourToRGB(const wxColour& c) { @@ -311,21 +316,32 @@ HCURSOR wxBitmapToHCURSOR(const wxBitmap& bmp, int hotSpotX, int hotSpotY); #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) #endif // GET_X_LPARAM -// get the current state of SHIFT/CTRL keys -inline bool wxIsShiftDown() +// get the current state of SHIFT/CTRL/ALT keys +inline bool wxIsModifierDown(int vk) { -// return (::GetKeyState(VK_SHIFT) & 0x100) != 0; - // Returns different negative values on WinME and WinNT, + // GetKeyState() returns different negative values on WinME and WinNT, // so simply test for negative value. - return ::GetKeyState(VK_SHIFT) < 0; + return ::GetKeyState(vk) < 0; +} + +inline bool wxIsShiftDown() +{ + return wxIsModifierDown(VK_SHIFT); } inline bool wxIsCtrlDown() { -// return (::GetKeyState(VK_CONTROL) & 0x100) != 0; - // Returns different negative values on WinME and WinNT, - // so simply test for negative value. - return ::GetKeyState(VK_CONTROL) < 0; + return wxIsModifierDown(VK_CONTROL); +} + +inline bool wxIsAltDown() +{ + return wxIsModifierDown(VK_MENU); +} + +inline bool wxIsAnyModifierDown() +{ + return wxIsShiftDown() || wxIsCtrlDown() || wxIsAltDown(); } // wrapper around GetWindowRect() and GetClientRect() APIs doing error checking @@ -406,29 +422,49 @@ private: // dtor class SelectInHDC { +private: + void DoInit(HGDIOBJ hgdiobj) { m_hgdiobj = ::SelectObject(m_hdc, hgdiobj); } + public: - SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc) - { m_hgdiobj = ::SelectObject(hdc, hgdiobj); } + SelectInHDC() : m_hdc(NULL) { } + SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc) { DoInit(hgdiobj); } - ~SelectInHDC() { ::SelectObject(m_hdc, m_hgdiobj); } + void Init(HDC hdc, HGDIOBJ hgdiobj) + { + wxASSERT_MSG( !m_hdc, _T("initializing twice?") ); - // return true if the object was successfully selected - operator bool() const { return m_hgdiobj != 0; } + m_hdc = hdc; + + DoInit(hgdiobj); + } + + ~SelectInHDC() { if ( m_hdc ) ::SelectObject(m_hdc, m_hgdiobj); } + + // return true if the object was successfully selected + operator bool() const { return m_hgdiobj != 0; } private: - HDC m_hdc; - HGDIOBJ m_hgdiobj; + HDC m_hdc; + HGDIOBJ m_hgdiobj; - DECLARE_NO_COPY_CLASS(SelectInHDC) + DECLARE_NO_COPY_CLASS(SelectInHDC) }; // a class which cleans up any GDI object class AutoGDIObject { protected: + AutoGDIObject() { m_gdiobj = NULL; } AutoGDIObject(HGDIOBJ gdiobj) : m_gdiobj(gdiobj) { } ~AutoGDIObject() { if ( m_gdiobj ) ::DeleteObject(m_gdiobj); } + void InitGdiobj(HGDIOBJ gdiobj) + { + wxASSERT_MSG( !m_gdiobj, _T("initializing twice?") ); + + m_gdiobj = gdiobj; + } + HGDIOBJ GetObject() const { return m_gdiobj; } private: @@ -437,7 +473,7 @@ private: // TODO: all this asks for using a AutoHandler template... -// a class for temporary pens +// a class for temporary brushes class AutoHBRUSH : private AutoGDIObject { public: @@ -447,6 +483,22 @@ public: operator HBRUSH() const { return (HBRUSH)GetObject(); } }; +// a class for temporary fonts +class AutoHFONT : private AutoGDIObject +{ +private: +public: + AutoHFONT() + : AutoGDIObject() { } + + AutoHFONT(const LOGFONT& lf) + : AutoGDIObject(::CreateFontIndirect(&lf)) { } + + void Init(const LOGFONT& lf) { InitGdiobj(::CreateFontIndirect(&lf)); } + + operator HFONT() const { return (HFONT)GetObject(); } +}; + // a class for temporary pens class AutoHPEN : private AutoGDIObject { @@ -656,7 +708,7 @@ public: { if ( IsRegistered() ) { - if ( !::UnregisterClass(m_clsname, wxhInstance) ) + if ( !::UnregisterClass(m_clsname.wx_str(), wxhInstance) ) { wxLogLastError(_T("UnregisterClass")); } @@ -788,7 +840,8 @@ enum wxWinVersion wxWinVersion_2003 = 0x0502, wxWinVersion_6 = 0x0600, - wxWinVersion_NT6 = 0x0600 + wxWinVersion_Vista = wxWinVersion_6, + wxWinVersion_NT6 = wxWinVersion_6 }; WXDLLIMPEXP_BASE wxWinVersion wxGetWinVersion(); @@ -818,7 +871,7 @@ extern WXDLLEXPORT wxString wxGetWindowClass(WXHWND hWnd); // get the window id (should be unsigned, hence this is not wxWindowID which // is, for mainly historical reasons, signed) -extern WXDLLEXPORT WXWORD wxGetWindowId(WXHWND hWnd); +extern WXDLLEXPORT int wxGetWindowId(WXHWND hWnd); // check if hWnd's WNDPROC is wndProc. Return true if yes, false if they are // different