#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
+
+
+#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"
+
+#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(__WXWINCE__)
+ typedef FARPROC WndProcCast;
+#elif 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))
#if wxUSE_GUI
#include <wx/gdicmn.h>
+#include <wx/colour.h>
// make conversion from wxColour and COLORREF a bit less painful
inline COLORREF wxColourToRGB(const wxColour& c)
return RGB(c.Red(), c.Green(), c.Blue());
}
+inline COLORREF wxColourToPalRGB(const wxColour& c)
+{
+ return PALETTERGB(c.Red(), c.Green(), c.Blue());
+}
+
+inline wxColour wxRGBToColour(COLORREF rgb)
+{
+ return wxColour(GetRValue(rgb), GetGValue(rgb), GetBValue(rgb));
+}
+
inline void wxRGBToColour(wxColour& c, COLORREF rgb)
{
c.Set(GetRValue(rgb), GetGValue(rgb), GetBValue(rgb));
}
+// get the standard colour map for some standard colours - see comment in this
+// function to understand why is it needed and when should it be used
+//
+// it returns a wxCOLORMAP (can't use COLORMAP itself here as comctl32.dll
+// might be not included/available) array of size wxSTD_COLOUR_MAX
+//
+// NB: if you change these colours, update wxBITMAP_STD_COLOURS in the
+// resources as well: it must have the same number of pixels!
+enum wxSTD_COLOUR
+{
+ wxSTD_COL_BTNTEXT,
+ wxSTD_COL_BTNSHADOW,
+ wxSTD_COL_BTNFACE,
+ wxSTD_COL_BTNHIGHLIGHT,
+ wxSTD_COL_MAX,
+};
+
+struct WXDLLEXPORT wxCOLORMAP
+{
+ COLORREF from, to;
+};
+
+// this function is implemented in src/msw/window.cpp
+extern wxCOLORMAP *wxGetStdColourMap();
+
// copy Windows RECT to our wxRect
inline void wxCopyRECTToRect(const RECT& r, wxRect& rect)
{
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;
+
+ DECLARE_NO_COPY_CLASS(ScreenHDC)
+};
+
+// 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() { ::DeleteDC(m_hdc); }
+
+ operator HDC() const { return m_hdc; }
+
+private:
+ HDC m_hdc;
+
+ DECLARE_NO_COPY_CLASS(MemoryHDC)
+};
+
+// 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;
+
+ DECLARE_NO_COPY_CLASS(SelectInHDC)
};
// ---------------------------------------------------------------------------
#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
// ---------------------------------------------------------------------------
extern HCURSOR wxGetCurrentBusyCursor(); // from msw/utils.cpp
extern const wxCursor *wxGetGlobalCursor(); // from msw/cursor.cpp
-WXDLLEXPORT wxWindow* wxFindWinFromHandle(WXHWND hWnd);
-
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);
// Find maximum size of window/rectangle
WXDLLEXPORT extern void wxFindMaxSize(WXHWND hwnd, RECT *rect);
-WXDLLEXPORT wxWindow* wxFindControlFromHandle(WXHWND hWnd);
-WXDLLEXPORT void wxAddControlHandle(WXHWND hWnd, wxWindow *item);
-
// Safely get the window text (i.e. without using fixed size buffer)
WXDLLEXPORT extern wxString wxGetWindowText(WXHWND hWnd);
// 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
+WXDLLEXPORT 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
-// corresponding wxWindow for HWND which just is one
+// ----------------------------------------------------------------------------
+// functions mapping HWND to wxWindow
+// ----------------------------------------------------------------------------
+
+// this function simply checks whether the given hWnd corresponds to a wxWindow
+// and returns either that window if it does or NULL otherwise
+WXDLLEXPORT extern wxWindow* wxFindWinFromHandle(WXHWND hWnd);
+
+// find the window for HWND which is part of some wxWindow, i.e. unlike
+// wxFindWinFromHandle() above it will also work for "sub controls" of a
+// wxWindow.
//
-// may return NULL
-extern wxWindow *wxGetWindowFromHWND(WXHWND hwnd);
+// 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);
#endif // wxUSE_GUI