#include "wx/log.h"
+#if wxUSE_GUI
+ #include "wx/window.h"
+#endif // wxUSE_GUI
+
class WXDLLIMPEXP_FWD_CORE wxFont;
class WXDLLIMPEXP_FWD_CORE wxWindow;
class WXDLLIMPEXP_FWD_CORE wxWindowBase;
#if wxUSE_GUI
-extern WXDLLEXPORT_DATA(HICON) wxSTD_FRAME_ICON;
-extern WXDLLEXPORT_DATA(HICON) wxSTD_MDIPARENTFRAME_ICON;
-extern WXDLLEXPORT_DATA(HICON) wxSTD_MDICHILDFRAME_ICON;
-extern WXDLLEXPORT_DATA(HICON) wxDEFAULT_FRAME_ICON;
-extern WXDLLEXPORT_DATA(HICON) wxDEFAULT_MDIPARENTFRAME_ICON;
-extern WXDLLEXPORT_DATA(HICON) wxDEFAULT_MDICHILDFRAME_ICON;
-extern WXDLLEXPORT_DATA(HFONT) wxSTATUS_LINE_FONT;
+extern WXDLLIMPEXP_DATA_CORE(HICON) wxSTD_FRAME_ICON;
+extern WXDLLIMPEXP_DATA_CORE(HICON) wxSTD_MDIPARENTFRAME_ICON;
+extern WXDLLIMPEXP_DATA_CORE(HICON) wxSTD_MDICHILDFRAME_ICON;
+extern WXDLLIMPEXP_DATA_CORE(HICON) wxDEFAULT_FRAME_ICON;
+extern WXDLLIMPEXP_DATA_CORE(HICON) wxDEFAULT_MDIPARENTFRAME_ICON;
+extern WXDLLIMPEXP_DATA_CORE(HICON) wxDEFAULT_MDICHILDFRAME_ICON;
+extern WXDLLIMPEXP_DATA_CORE(HFONT) wxSTATUS_LINE_FONT;
#endif // wxUSE_GUI
wxSTD_COL_MAX
};
-struct WXDLLEXPORT wxCOLORMAP
+struct WXDLLIMPEXP_CORE wxCOLORMAP
{
COLORREF from, to;
};
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
//
HDCMapModeChanger wxMAKE_UNIQUE_NAME(wxHDCMapModeChanger)(hdc, mm)
#endif // __WXWINCE__/!__WXWINCE__
-// smart buffeer using GlobalAlloc/GlobalFree()
+// smart pointer using GlobalAlloc/GlobalFree()
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"));
}
+ GlobalPtr(size_t size, unsigned flags = GMEM_MOVEABLE)
+ {
+ Init(size, flags);
+ }
+
~GlobalPtr()
{
if ( m_hGlobal && ::GlobalFree(m_hGlobal) )
void Init(HGLOBAL hGlobal)
{
m_hGlobal = hGlobal;
- m_ptr = ::GlobalLock(hGlobal);
+
+ // NB: GlobalLock() is a macro, not a function, hence don't use the
+ // global scope operator with it (and neither with GlobalUnlock())
+ m_ptr = GlobalLock(hGlobal);
if ( !m_ptr )
wxLogLastError(_T("GlobalLock"));
}
~GlobalPtrLock()
{
- if ( m_hGlobal && !::GlobalUnlock(m_hGlobal) )
+ if ( m_hGlobal && !GlobalUnlock(m_hGlobal) )
{
#ifdef __WXDEBUG__
// this might happen simply because the block became unlocked
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 wxFillLogFont(LOGFONT *logFont, const wxFont *font);
-WXDLLEXPORT wxFont wxCreateFontFromLogFont(const LOGFONT *logFont);
-WXDLLEXPORT wxFontEncoding wxGetFontEncFromCharSet(int charset);
+WXDLLIMPEXP_CORE void wxGetCharSize(WXHWND wnd, int *x, int *y, const wxFont& the_font);
+WXDLLIMPEXP_CORE void wxFillLogFont(LOGFONT *logFont, const wxFont *font);
+WXDLLIMPEXP_CORE wxFont wxCreateFontFromLogFont(const LOGFONT *logFont);
+WXDLLIMPEXP_CORE wxFontEncoding wxGetFontEncFromCharSet(int charset);
-WXDLLEXPORT void wxSliderEvent(WXHWND control, WXWORD wParam, WXWORD pos);
-WXDLLEXPORT void wxScrollBarEvent(WXHWND hbar, WXWORD wParam, WXWORD pos);
+WXDLLIMPEXP_CORE void wxSliderEvent(WXHWND control, WXWORD wParam, WXWORD pos);
+WXDLLIMPEXP_CORE void wxScrollBarEvent(WXHWND hbar, WXWORD wParam, WXWORD pos);
// Find maximum size of window/rectangle
-extern WXDLLEXPORT void wxFindMaxSize(WXHWND hwnd, RECT *rect);
+extern WXDLLIMPEXP_CORE void wxFindMaxSize(WXHWND hwnd, RECT *rect);
// Safely get the window text (i.e. without using fixed size buffer)
-extern WXDLLEXPORT wxString wxGetWindowText(WXHWND hWnd);
+extern WXDLLIMPEXP_CORE wxString wxGetWindowText(WXHWND hWnd);
// get the window class name
-extern WXDLLEXPORT wxString wxGetWindowClass(WXHWND hWnd);
+extern WXDLLIMPEXP_CORE wxString wxGetWindowClass(WXHWND hWnd);
// get the window id (should be unsigned, hence this is not wxWindowID which
// is, for mainly historical reasons, signed)
-extern WXDLLEXPORT int wxGetWindowId(WXHWND hWnd);
+extern WXDLLIMPEXP_CORE int wxGetWindowId(WXHWND hWnd);
// check if hWnd's WNDPROC is wndProc. Return true if yes, false if they are
// different
-extern WXDLLEXPORT bool wxCheckWindowWndProc(WXHWND hWnd, WXFARPROC wndProc);
+extern WXDLLIMPEXP_CORE bool wxCheckWindowWndProc(WXHWND hWnd, WXFARPROC wndProc);
// Does this window style specify any border?
inline bool wxStyleHasBorder(long style)
wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0;
}
+inline long wxGetWindowExStyle(const wxWindowMSW *win)
+{
+ return ::GetWindowLong(GetHwndOf(win), GWL_EXSTYLE);
+}
+
+inline bool wxHasWindowExStyle(const wxWindowMSW *win, long style)
+{
+ return (wxGetWindowExStyle(win) & style) != 0;
+}
+
+inline long wxSetWindowExStyle(const wxWindowMSW *win, long style)
+{
+ return ::SetWindowLong(GetHwndOf(win), GWL_EXSTYLE, style);
+}
+
// ----------------------------------------------------------------------------
// 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
-extern WXDLLEXPORT wxWindow* wxFindWinFromHandle(HWND hwnd);
+extern WXDLLIMPEXP_CORE wxWindow* wxFindWinFromHandle(HWND hwnd);
// without STRICT WXHWND is the same as HWND anyhow
inline wxWindow* wxFindWinFromHandle(WXHWND hWnd)
{
- return wxFindWinFromHandle(wx_static_cast(HWND, hWnd));
+ return wxFindWinFromHandle(static_cast<HWND>(hWnd));
}
// find the window for HWND which is part of some wxWindow, i.e. unlike
// wxWindow.
//
// returns the wxWindow corresponding to the given HWND or NULL.
-extern WXDLLEXPORT wxWindow *wxGetWindowFromHWND(WXHWND hwnd);
+extern WXDLLIMPEXP_CORE wxWindow *wxGetWindowFromHWND(WXHWND hwnd);
// Get the size of an icon
-extern WXDLLEXPORT wxSize wxGetHiconSize(HICON hicon);
+extern WXDLLIMPEXP_CORE 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);
+WXDLLIMPEXP_CORE void wxDrawLine(HDC hdc, int x1, int y1, int x2, int y2);
// fill the client rect of the given window on the provided dc using this brush
inline void wxFillRect(HWND hwnd, HDC hdc, HBRUSH hbr)