#ifndef _WX_PRIVATE_H_
#define _WX_PRIVATE_H_
+#ifndef STRICT
+ #define STRICT 1
+#endif
+
#include <windows.h>
+#ifdef __WXMICROWIN__
+ // Extra prototypes and symbols not defined by MicroWindows
+ #include "wx/msw/microwin.h"
+#endif
+
// undefine conflicting symbols which were defined in windows.h
#include "wx/msw/winundef.h"
+#include "wx/log.h"
+
class WXDLLEXPORT wxFont;
class WXDLLEXPORT wxWindow;
// this defines a CASTWNDPROC macro which casts a pointer to the type of a
// window proc
-
-#ifdef __GNUWIN32_OLD__
- #define CASTWNDPROC (long unsigned)
+#if defined(STRICT) || defined(__GNUC__)
+ typedef WNDPROC WndProcCast;
#else
- #if defined(STRICT) || defined(__GNUC__)
- typedef WNDPROC WndProcCast;
- #else
- typedef FARPROC WndProcCast;
- #endif
- #define CASTWNDPROC (WndProcCast)
-#endif // __GNUWIN32_OLD__
+ typedef FARPROC WndProcCast;
+#endif
+
+#define CASTWNDPROC (WndProcCast)
// ---------------------------------------------------------------------------
// some stuff for old Windows versions (FIXME: what does it do here??)
// ---------------------------------------------------------------------------
// a wrapper macro for ZeroMemory()
-#ifdef __WIN32__
+#if defined(__WIN32__) && !defined(__WXMICROWIN__)
#define wxZeroMemory(obj) ::ZeroMemory(&obj, sizeof(obj))
#else
#define wxZeroMemory(obj) memset((void*) & obj, 0, sizeof(obj))
// make conversion from wxColour and COLORREF a bit less painful
inline COLORREF wxColourToRGB(const wxColour& c)
{
- return RGB(c.Red(), c.Green(), c.Blue());
+ return PALETTERGB(c.Red(), c.Green(), c.Blue());
}
inline void wxRGBToColour(wxColour& c, COLORREF rgb)
return (::GetKeyState(VK_CONTROL) & 0x100) != 0;
}
+// wrapper around GetWindowRect() and GetClientRect() APIs doing error checking
+// for Win32
+inline RECT wxGetWindowRect(HWND hwnd)
+{
+ RECT rect;
+#ifdef __WIN16__
+ ::GetWindowRect(hwnd, &rect);
+#else // Win32
+ if ( !::GetWindowRect(hwnd, &rect) )
+ {
+ wxLogLastError(_T("GetWindowRect"));
+ }
+#endif // Win16/32
+
+ return rect;
+}
+
+inline RECT wxGetClientRect(HWND hwnd)
+{
+ RECT rect;
+#ifdef __WIN16__
+ ::GetClientRect(hwnd, &rect);
+#else // Win32
+ if ( !::GetClientRect(hwnd, &rect) )
+ {
+ wxLogLastError(_T("GetClientRect"));
+ }
+#endif // Win16/32
+
+ return rect;
+}
+
// ---------------------------------------------------------------------------
// small helper classes
// ---------------------------------------------------------------------------
class ScreenHDC
{
public:
- ScreenHDC() { m_hdc = GetDC(NULL); }
- ~ScreenHDC() { ReleaseDC(NULL, m_hdc); }
- operator HDC() const { return m_hdc; }
+ ScreenHDC() { m_hdc = ::GetDC(NULL); }
+ ~ScreenHDC() { ::ReleaseDC(NULL, m_hdc); }
+
+ operator HDC() const { return m_hdc; }
+
+private:
+ HDC m_hdc;
+};
+
+// the same as ScreenHDC but for memory DCs: creates the HDC in ctor and
+// destroys it in dtor
+class MemoryHDC
+{
+public:
+ MemoryHDC() { m_hdc = ::CreateCompatibleDC(NULL); }
+ ~MemoryHDC() { ::DeleteObject(m_hdc); }
+
+ operator HDC() const { return m_hdc; }
private:
HDC m_hdc;
};
+// a class which selects a GDI object into a DC in its ctor and deselects in
+// dtor
+class SelectInHDC
+{
+public:
+ SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc)
+ { m_hgdiobj = ::SelectObject(hdc, hgdiobj); }
+
+ ~SelectInHDC() { ::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;
+};
+
// ---------------------------------------------------------------------------
// macros to make casting between WXFOO and FOO a bit easier: the GetFoo()
// returns Foo cast to the Windows type for oruselves, while GetFooOf() takes
#define GetHfont() ((HFONT)GetHFONT())
#define GetHfontOf(font) ((HFONT)(font).GetHFONT())
+#define GetHpalette() ((HPALETTE)GetHPALETTE())
+#define GetHpaletteOf(pal) ((HPALETTE)(pal)->GetHPALETTE())
+
+#define GetHrgn() ((HRGN)GetHRGN())
+#define GetHrgnOf(rgn) ((HRGN)(rgn).GetHRGN())
+
#endif // wxUSE_GUI
// ---------------------------------------------------------------------------
// is, for mainly historical reasons, signed)
WXDLLEXPORT extern WXWORD wxGetWindowId(WXHWND hWnd);
+// check if hWnd's WNDPROC is wndProc. Return true if yes, false if they are different
+extern bool wxCheckWindowWndProc(WXHWND hWnd, WXFARPROC wndProc);
+
// Does this window style specify any border?
inline bool wxStyleHasBorder(long style)
{
- return (style & (wxSIMPLE_BORDER | wxRAISED_BORDER |
- wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0;
+ return (style & (wxSIMPLE_BORDER | wxRAISED_BORDER |
+ wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0;
}
// find the window for HWND which is part of some wxWindow, returns just the