X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77ffb5937e89927b621128789401db8921fe580f..fd6c94288f31c06d4ad3c7d7ab17ed2e32b16b33:/include/wx/msw/private.h diff --git a/include/wx/msw/private.h b/include/wx/msw/private.h index 1bd4f43c81..503f119bed 100644 --- a/include/wx/msw/private.h +++ b/include/wx/msw/private.h @@ -8,7 +8,7 @@ // Created: 01/02/97 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWidgets licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_PRIVATE_H_ @@ -33,18 +33,10 @@ class WXDLLEXPORT wxWindow; // private constants // --------------------------------------------------------------------------- -// Conversion -static const double METRIC_CONVERSION_CONSTANT = 0.0393700787; - -// Scaling factors for various unit conversions -static const double mm2inches = (METRIC_CONVERSION_CONSTANT); -static const double inches2mm = (1/METRIC_CONVERSION_CONSTANT); - -static const double mm2twips = (METRIC_CONVERSION_CONSTANT*1440); -static const double twips2mm = (1/(METRIC_CONVERSION_CONSTANT*1440)); - -static const double mm2pt = (METRIC_CONVERSION_CONSTANT*72); -static const double pt2mm = (1/(METRIC_CONVERSION_CONSTANT*72)); +// 260 was taken from windef.h +#ifndef MAX_PATH + #define MAX_PATH 260 +#endif // --------------------------------------------------------------------------- // standard icons from the resources @@ -125,10 +117,6 @@ WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT; VOID WINAPI ibAdjustWindowRect( HWND hWnd, LPRECT lprc ) ; #endif // wxUSE_ITSY_BITSY -#if wxUSE_CTL3D - #include "wx/msw/ctl3d/ctl3d.h" -#endif // wxUSE_CTL3D - /* * Decide what window classes we're going to use * for this combination of CTl3D/FAFA settings @@ -138,11 +126,11 @@ WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT; #define STATIC_FLAGS (SS_LEFT|WS_CHILD|WS_VISIBLE) #define CHECK_CLASS wxT("BUTTON") #define CHECK_FLAGS (BS_AUTOCHECKBOX|WS_TABSTOP|WS_CHILD) -#define CHECK_IS_FAFA FALSE +#define CHECK_IS_FAFA FALSE #define RADIO_CLASS wxT("BUTTON") #define RADIO_FLAGS (BS_AUTORADIOBUTTON|WS_CHILD|WS_VISIBLE) #define RADIO_SIZE 20 -#define RADIO_IS_FAFA FALSE +#define RADIO_IS_FAFA FALSE #define PURE_WINDOWS #define GROUP_CLASS wxT("BUTTON") #define GROUP_FLAGS (BS_GROUPBOX|WS_CHILD|WS_VISIBLE) @@ -220,7 +208,7 @@ enum wxSTD_COLOUR wxSTD_COL_BTNSHADOW, wxSTD_COL_BTNFACE, wxSTD_COL_BTNHIGHLIGHT, - wxSTD_COL_MAX, + wxSTD_COL_MAX }; struct WXDLLEXPORT wxCOLORMAP @@ -231,13 +219,16 @@ struct WXDLLEXPORT wxCOLORMAP // this function is implemented in src/msw/window.cpp extern wxCOLORMAP *wxGetStdColourMap(); +// create a wxRect from Windows RECT +inline wxRect wxRectFromRECT(const RECT& r) +{ + return wxRect(r.left, r.top, r.right - r.left, r.bottom - r.top); +} + // copy Windows RECT to our wxRect inline void wxCopyRECTToRect(const RECT& r, wxRect& rect) { - rect.y = r.top; - rect.x = r.left; - rect.width = r.right - r.left; - rect.height = r.bottom - r.top; + rect = wxRectFromRECT(r); } // translations between HIMETRIC units (which OLE likes) and pixels (which are @@ -325,7 +316,9 @@ struct WinStruct : public T WinStruct() { ::ZeroMemory(this, sizeof(T)); - cbSize = sizeof(T); + + // explicit qualification is required here for this to be valid C++ + this->cbSize = sizeof(T); } }; @@ -346,6 +339,22 @@ private: DECLARE_NO_COPY_CLASS(ScreenHDC) }; +// the same as ScreenHDC but for window DCs +class WindowHDC +{ +public: + WindowHDC(HWND hwnd) { m_hdc = ::GetDC(m_hwnd = hwnd); } + ~WindowHDC() { ::ReleaseDC(m_hwnd, m_hdc); } + + operator HDC() const { return m_hdc; } + +private: + HWND m_hwnd; + HDC m_hdc; + + DECLARE_NO_COPY_CLASS(WindowHDC) +}; + // the same as ScreenHDC but for memory DCs: creates the HDC compatible with // the given one (screen by default) in ctor and destroys it in dtor class MemoryHDC @@ -382,6 +391,27 @@ private: DECLARE_NO_COPY_CLASS(SelectInHDC) }; +// a class for temporary bitmaps +class CompatibleBitmap +{ +public: + CompatibleBitmap(HDC hdc, int w, int h) + { + m_hbmp = ::CreateCompatibleBitmap(hdc, w, h); + } + + ~CompatibleBitmap() + { + if ( m_hbmp ) + ::DeleteObject(m_hbmp); + } + + operator HBITMAP() const { return m_hbmp; } + +private: + HBITMAP m_hbmp; +}; + // 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 @@ -485,13 +515,36 @@ extern "C" WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst); +// return the full path of the given module +inline wxString wxGetFullModuleName(HMODULE hmod) +{ + wxString fullname; + if ( !::GetModuleFileName + ( + hmod, + wxStringBuffer(fullname, MAX_PATH), + MAX_PATH + ) ) + { + wxLogLastError(_T("GetModuleFileName")); + } + + return fullname; +} + +// return the full path of the program file +inline wxString wxGetFullModuleName() +{ + return wxGetFullModuleName((HMODULE)wxGetInstance()); +} + #if wxUSE_GUI // cursor stuff extern HCURSOR wxGetCurrentBusyCursor(); // from msw/utils.cpp extern const wxCursor *wxGetGlobalCursor(); // from msw/cursor.cpp -WXDLLEXPORT void wxGetCharSize(WXHWND wnd, int *x, int *y, const wxFont *the_font); +WXDLLEXPORT void wxGetCharSize(WXHWND wnd, int *x, int *y, const wxFont& the_font); WXDLLEXPORT void wxFillLogFont(LOGFONT *logFont, const wxFont *font); WXDLLEXPORT wxFont wxCreateFontFromLogFont(const LOGFONT *logFont); WXDLLEXPORT wxFontEncoding wxGetFontEncFromCharSet(int charset); @@ -572,6 +625,13 @@ 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) { return (void *)::GetWindowLong(hwnd, GWL_WNDPROC); @@ -592,6 +652,11 @@ inline void *wxSetWindowUserData(HWND hwnd, void *data) return (void *)::SetWindowLong(hwnd, GWL_USERDATA, (LONG)data); } +#ifdef __VISUALC__ + #pragma warning(default:4311) + #pragma warning(default:4312) +#endif + #endif // __WIN64__/__WIN32__ #endif // wxUSE_GUI