#ifndef _WX_PRIVATE_H_
#define _WX_PRIVATE_H_
-#ifndef STRICT
- #define STRICT 1
-#endif
-
-#include <windows.h>
-
-
-#if defined (__WXWINCE__)
- #include <wingdi.h> // RGB, COLORREF
- #include <winuser.h> // Global Namespaces ::GetKeyState, ::GetWindowRect
-#endif
-
+#include "wx/msw/wrapwin.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 fixes for MSLU:
#include "wx/msw/mslu.h"
// define things missing from some compilers' headers
// ---------------------------------------------------------------------------
-#if defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS
+#if defined(__WXWINCE__) || (defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS)
#ifndef ZeroMemory
inline void ZeroMemory(void *buf, size_t len) { memset(buf, 0, len); }
#endif
// this defines a CASTWNDPROC macro which casts a pointer to the type of a
// window proc
-#if defined(__WXWINCE__)
- typedef FARPROC WndProcCast;
-#elif defined(STRICT) || defined(__GNUC__)
+#if defined(STRICT) || defined(__GNUC__)
typedef WNDPROC WndProcCast;
#else
typedef FARPROC WndProcCast;
#define CASTWNDPROC (WndProcCast)
+
+
// ---------------------------------------------------------------------------
// some stuff for old Windows versions (FIXME: what does it do here??)
// ---------------------------------------------------------------------------
// get the current state of SHIFT/CTRL keys
inline bool wxIsShiftDown()
{
- return (::GetKeyState(VK_SHIFT) & 0x100) != 0;
+// return (::GetKeyState(VK_SHIFT) & 0x100) != 0;
+ // Returns different negative values on WinME and WinNT,
+ // so simply test for negative value.
+ return ::GetKeyState(VK_SHIFT) < 0;
}
inline bool wxIsCtrlDown()
{
- return (::GetKeyState(VK_CONTROL) & 0x100) != 0;
+// 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;
}
// wrapper around GetWindowRect() and GetClientRect() APIs doing error checking
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
// ---------------------------------------------------------------------------
+// a template to make initializing Windows styructs less painful: it zeroes all
+// the struct fields and also sets cbSize member to the correct value (and so
+// can be only used with structures which have this member...)
+template <class T>
+struct WinStruct : public T
+{
+ WinStruct()
+ {
+ ::ZeroMemory(this, sizeof(T));
+ cbSize = sizeof(T);
+ }
+};
+
+
// create an instance of this class and use it as the HDC for screen, will
// automatically release the DC going out of scope
class ScreenHDC
public:
GlobalPtr(HGLOBAL hGlobal) : m_hGlobal(hGlobal)
{
- m_ptr = ::GlobalLock(hGlobal);
+ m_ptr = GlobalLock(hGlobal);
if ( !m_ptr )
{
wxLogLastError(_T("GlobalLock"));
~GlobalPtr()
{
- if ( !::GlobalUnlock(m_hGlobal) )
+ if ( !GlobalUnlock(m_hGlobal) )
{
#ifdef __WXDEBUG__
// this might happen simply because the block became unlocked
#define GetHaccel() ((HACCEL)GetHACCEL())
#define GetHaccelOf(table) ((HACCEL)((table).GetHACCEL()))
+#define GetHbrush() ((HPEN)GetResourceHandle())
+#define GetHbrushOf(brush) ((HPEN)(brush).GetResourceHandle())
+
#define GetHmenu() ((HMENU)GetHMenu())
#define GetHmenuOf(menu) ((HMENU)menu->GetHMenu())
#define GetHpalette() ((HPALETTE)GetHPALETTE())
#define GetHpaletteOf(pal) ((HPALETTE)(pal).GetHPALETTE())
+#define GetHpen() ((HPEN)GetResourceHandle())
+#define GetHpenOf(pen) ((HPEN)(pen).GetResourceHandle())
+
#define GetHrgn() ((HRGN)GetHRGN())
#define GetHrgnOf(rgn) ((HRGN)(rgn).GetHRGN())
// global data
// ---------------------------------------------------------------------------
-WXDLLEXPORT_DATA(extern wxChar*) wxBuffer;
-
-WXDLLEXPORT_DATA(extern HINSTANCE) wxhInstance;
+WXDLLIMPEXP_DATA_BASE(extern HINSTANCE) wxhInstance;
// ---------------------------------------------------------------------------
// global functions
extern "C"
{
- WXDLLEXPORT HINSTANCE wxGetInstance();
+ WXDLLIMPEXP_BASE HINSTANCE wxGetInstance();
}
-WXDLLEXPORT void wxSetInstance(HINSTANCE hInst);
+WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);
#if wxUSE_GUI
// returns the wxWindow corresponding to the given HWND or NULL.
WXDLLEXPORT extern wxWindow *wxGetWindowFromHWND(WXHWND hwnd);
-
// Get the size of an icon
WXDLLEXPORT extern 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);
+
+// ----------------------------------------------------------------------------
+// 32/64 bit helpers
+// ----------------------------------------------------------------------------
+
+#ifdef __WIN64__
+
+inline void *wxGetWindowProc(HWND hwnd)
+{
+ return (void *)::GetWindowLongPtr(hwnd, GWLP_WNDPROC);
+}
+
+inline void *wxGetWindowUserData(HWND hwnd)
+{
+ return (void *)::GetWindowLongPtr(hwnd, GWLP_USERDATA);
+}
+
+inline WNDPROC wxSetWindowProc(HWND hwnd, WNDPROC func)
+{
+ return (WNDPROC)::SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)func);
+}
+
+inline void *wxSetWindowUserData(HWND hwnd, void *data)
+{
+ return (void *)::SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)data);
+}
+
+#else // __WIN32__
+
+inline void *wxGetWindowProc(HWND hwnd)
+{
+ return (void *)::GetWindowLong(hwnd, GWL_WNDPROC);
+}
+
+inline void *wxGetWindowUserData(HWND hwnd)
+{
+ return (void *)::GetWindowLong(hwnd, GWL_USERDATA);
+}
+
+inline WNDPROC wxSetWindowProc(HWND hwnd, WNDPROC func)
+{
+ return (WNDPROC)::SetWindowLong(hwnd, GWL_WNDPROC, (LONG)func);
+}
+
+inline void *wxSetWindowUserData(HWND hwnd, void *data)
+{
+ return (void *)::SetWindowLong(hwnd, GWL_USERDATA, (LONG)data);
+}
+
+#endif // __WIN64__/__WIN32__
+
#endif // wxUSE_GUI
#endif