X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5c33522fca7cddc441a316f5b9fb50d7685435ba..da8b1d4b3b535aba94d04494f5b6e2b3e47901ee:/include/wx/msw/private.h diff --git a/include/wx/msw/private.h b/include/wx/msw/private.h index 146d2d3a37..2d75ccdf6a 100644 --- a/include/wx/msw/private.h +++ b/include/wx/msw/private.h @@ -289,7 +289,9 @@ inline void wxCopyRectToRECT(const wxRect& rect, RECT& rc) // translations between HIMETRIC units (which OLE likes) and pixels (which are // liked by all the others) - implemented in msw/utilsexc.cpp extern void HIMETRICToPixel(LONG *x, LONG *y); +extern void HIMETRICToPixel(LONG *x, LONG *y, HDC hdcRef); extern void PixelToHIMETRIC(LONG *x, LONG *y); +extern void PixelToHIMETRIC(LONG *x, LONG *y, HDC hdcRef); // Windows convention of the mask is opposed to the wxWidgets one, so we need // to invert the mask each time we pass one/get one to/from Windows @@ -306,6 +308,22 @@ extern HICON wxBitmapToHICON(const wxBitmap& bmp); extern HCURSOR wxBitmapToHCURSOR(const wxBitmap& bmp, int hotSpotX, int hotSpotY); + +#if wxUSE_OWNER_DRAWN + +// Draw the bitmap in specified state (this is used by owner drawn controls) +enum wxDSBStates +{ + wxDSB_NORMAL = 0, + wxDSB_SELECTED, + wxDSB_DISABLED +}; + +extern +BOOL wxDrawStateBitmap(HDC hDC, HBITMAP hBitmap, int x, int y, UINT uState); + +#endif // wxUSE_OWNER_DRAWN + // get (x, y) from DWORD - notice that HI/LOWORD can *not* be used because they // will fail on system with multiple monitors where the coords may be negative // @@ -350,7 +368,9 @@ inline RECT wxGetWindowRect(HWND hwnd) RECT rect; if ( !::GetWindowRect(hwnd, &rect) ) - wxLogLastError(_T("GetWindowRect")); + { + wxLogLastError(wxT("GetWindowRect")); + } return rect; } @@ -360,7 +380,9 @@ inline RECT wxGetClientRect(HWND hwnd) RECT rect; if ( !::GetClientRect(hwnd, &rect) ) - wxLogLastError(_T("GetClientRect")); + { + wxLogLastError(wxT("GetClientRect")); + } return rect; } @@ -382,7 +404,7 @@ public: private: HDC m_hdc; - DECLARE_NO_COPY_CLASS(ScreenHDC) + wxDECLARE_NO_COPY_CLASS(ScreenHDC); }; // the same as ScreenHDC but for window DCs @@ -398,7 +420,7 @@ private: HWND m_hwnd; HDC m_hdc; - DECLARE_NO_COPY_CLASS(WindowHDC) + wxDECLARE_NO_COPY_CLASS(WindowHDC); }; // the same as ScreenHDC but for memory DCs: creates the HDC compatible with @@ -414,7 +436,7 @@ public: private: HDC m_hdc; - DECLARE_NO_COPY_CLASS(MemoryHDC) + wxDECLARE_NO_COPY_CLASS(MemoryHDC); }; // a class which selects a GDI object into a DC in its ctor and deselects in @@ -430,7 +452,7 @@ public: void Init(HDC hdc, HGDIOBJ hgdiobj) { - wxASSERT_MSG( !m_hdc, _T("initializing twice?") ); + wxASSERT_MSG( !m_hdc, wxT("initializing twice?") ); m_hdc = hdc; @@ -446,7 +468,7 @@ private: HDC m_hdc; HGDIOBJ m_hgdiobj; - DECLARE_NO_COPY_CLASS(SelectInHDC) + wxDECLARE_NO_COPY_CLASS(SelectInHDC); }; // a class which cleans up any GDI object @@ -459,7 +481,7 @@ protected: void InitGdiobj(HGDIOBJ gdiobj) { - wxASSERT_MSG( !m_gdiobj, _T("initializing twice?") ); + wxASSERT_MSG( !m_gdiobj, wxT("initializing twice?") ); m_gdiobj = gdiobj; } @@ -552,7 +574,9 @@ public: : m_hdc(hdc) { if ( !::SelectClipRgn(hdc, hrgn) ) - wxLogLastError(_T("SelectClipRgn")); + { + wxLogLastError(wxT("SelectClipRgn")); + } } ~HDCClipper() @@ -563,7 +587,7 @@ public: private: HDC m_hdc; - DECLARE_NO_COPY_CLASS(HDCClipper) + wxDECLARE_NO_COPY_CLASS(HDCClipper); }; // set the given map mode for the life time of this object @@ -581,7 +605,9 @@ private: { m_modeOld = ::SetMapMode(hdc, mm); if ( !m_modeOld ) - wxLogLastError(_T("SelectClipRgn")); + { + wxLogLastError(wxT("SelectClipRgn")); + } } ~HDCMapModeChanger() @@ -594,7 +620,7 @@ private: HDC m_hdc; int m_modeOld; - DECLARE_NO_COPY_CLASS(HDCMapModeChanger) + wxDECLARE_NO_COPY_CLASS(HDCMapModeChanger); }; #define wxCHANGE_HDC_MAP_MODE(hdc, mm) \ @@ -605,18 +631,33 @@ private: class GlobalPtr { public: + // default ctor, call Init() later + GlobalPtr() + { + m_hGlobal = NULL; + } + // allocates a block of given size - GlobalPtr(size_t size, unsigned flags = GMEM_MOVEABLE) + void Init(size_t size, unsigned flags = GMEM_MOVEABLE) { m_hGlobal = ::GlobalAlloc(flags, size); if ( !m_hGlobal ) - wxLogLastError(_T("GlobalAlloc")); + { + wxLogLastError(wxT("GlobalAlloc")); + } + } + + GlobalPtr(size_t size, unsigned flags = GMEM_MOVEABLE) + { + Init(size, flags); } ~GlobalPtr() { if ( m_hGlobal && ::GlobalFree(m_hGlobal) ) - wxLogLastError(_T("GlobalFree")); + { + wxLogLastError(wxT("GlobalFree")); + } } // implicit conversion @@ -625,7 +666,7 @@ public: private: HGLOBAL m_hGlobal; - DECLARE_NO_COPY_CLASS(GlobalPtr) + wxDECLARE_NO_COPY_CLASS(GlobalPtr); }; // when working with global pointers (which is unfortunately still necessary @@ -652,7 +693,9 @@ public: // global scope operator with it (and neither with GlobalUnlock()) m_ptr = GlobalLock(hGlobal); if ( !m_ptr ) - wxLogLastError(_T("GlobalLock")); + { + wxLogLastError(wxT("GlobalLock")); + } } // initialize the object, HGLOBAL must not be NULL @@ -665,14 +708,12 @@ public: { if ( m_hGlobal && !GlobalUnlock(m_hGlobal) ) { -#ifdef __WXDEBUG__ // this might happen simply because the block became unlocked DWORD dwLastError = ::GetLastError(); if ( dwLastError != NO_ERROR ) { - wxLogApiError(_T("GlobalUnlock"), dwLastError); + wxLogApiError(wxT("GlobalUnlock"), dwLastError); } -#endif // __WXDEBUG__ } } @@ -683,7 +724,7 @@ private: HGLOBAL m_hGlobal; void *m_ptr; - DECLARE_NO_COPY_CLASS(GlobalPtrLock) + wxDECLARE_NO_COPY_CLASS(GlobalPtrLock); }; // register the class when it is first needed and unregister it in dtor @@ -704,12 +745,12 @@ public: { // we should only be called if we hadn't been initialized yet wxASSERT_MSG( m_registered == -1, - _T("calling ClassRegistrar::Register() twice?") ); + wxT("calling ClassRegistrar::Register() twice?") ); m_registered = ::RegisterClass(&wc) ? 1 : 0; if ( !IsRegistered() ) { - wxLogLastError(_T("RegisterClassEx()")); + wxLogLastError(wxT("RegisterClassEx()")); } else { @@ -730,7 +771,7 @@ public: { if ( !::UnregisterClass(m_clsname.wx_str(), wxhInstance) ) { - wxLogLastError(_T("UnregisterClass")); + wxLogLastError(wxT("UnregisterClass")); } } } @@ -772,7 +813,7 @@ private: #define GetHbrushOf(brush) ((HBRUSH)(brush).GetResourceHandle()) #define GetHmenu() ((HMENU)GetHMenu()) -#define GetHmenuOf(menu) ((HMENU)menu->GetHMenu()) +#define GetHmenuOf(menu) ((HMENU)(menu)->GetHMenu()) #define GetHcursor() ((HCURSOR)GetHCURSOR()) #define GetHcursorOf(cursor) ((HCURSOR)(cursor).GetHCURSOR()) @@ -781,7 +822,7 @@ private: #define GetHfontOf(font) ((HFONT)(font).GetHFONT()) #define GetHimagelist() ((HIMAGELIST)GetHIMAGELIST()) -#define GetHimagelistOf(imgl) ((HIMAGELIST)imgl->GetHIMAGELIST()) +#define GetHimagelistOf(imgl) ((HIMAGELIST)(imgl)->GetHIMAGELIST()) #define GetHpalette() ((HPALETTE)GetHPALETTE()) #define GetHpaletteOf(pal) ((HPALETTE)(pal).GetHPALETTE()) @@ -816,7 +857,7 @@ inline wxString wxGetFullModuleName(HMODULE hmod) MAX_PATH ) ) { - wxLogLastError(_T("GetModuleFileName")); + wxLogLastError(wxT("GetModuleFileName")); } return fullname; @@ -835,9 +876,10 @@ inline wxString wxGetFullModuleName() // 0x0400 Windows 95, NT4 // 0x0410 Windows 98 // 0x0500 Windows ME, 2000 -// 0x0501 Windows XP -// 0x0502 Windows 2003 -// 0x0600 Longhorn +// 0x0501 Windows XP, 2003 +// 0x0502 Windows XP SP2, 2003 SP1 +// 0x0600 Windows Vista, 2008 +// 0x0601 Windows 7 // // for the other Windows versions 0 is currently returned enum wxWinVersion @@ -857,11 +899,15 @@ enum wxWinVersion wxWinVersion_NT5 = wxWinVersion_5, wxWinVersion_2000 = wxWinVersion_5, wxWinVersion_XP = 0x0501, - wxWinVersion_2003 = 0x0502, + wxWinVersion_2003 = 0x0501, + wxWinVersion_XP_SP2 = 0x0502, + wxWinVersion_2003_SP1 = 0x0502, wxWinVersion_6 = 0x0600, wxWinVersion_Vista = wxWinVersion_6, - wxWinVersion_NT6 = wxWinVersion_6 + wxWinVersion_NT6 = wxWinVersion_6, + + wxWinVersion_7 = 0x601 }; WXDLLIMPEXP_BASE wxWinVersion wxGetWinVersion();