#include "wx/msw/private.h"
#include <windowsx.h>
-#if !defined(__GNUWIN32__) || defined(__TWIN32__) || defined(wxUSE_NORLANDER_HEADERS)
-#include <commctrl.h>
+#if !(defined(__GNUWIN32_OLD__) || defined(__TWIN32__))
+ #include <commctrl.h>
#endif
// ----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxStatusBar95, wxWindow);
IMPLEMENT_DYNAMIC_CLASS(wxStatusBar, wxStatusBar95)
-BEGIN_EVENT_TABLE(wxStatusBar95, wxWindow)
- EVT_SIZE(wxStatusBar95::OnSize)
-END_EVENT_TABLE()
-
// ----------------------------------------------------------------------------
// macros
// ----------------------------------------------------------------------------
//
// ----------------------------------------------------------------------------
-static WNDPROC gs_wndprocStatBar = NULL;
+// static WNDPROC gs_wndprocStatBar = NULL;
+static WXFARPROC gs_wndprocStatBar = (WXFARPROC) NULL;
LRESULT APIENTRY wxStatusBarProc(HWND hwnd,
UINT message,
long style,
const wxString& name)
{
+ wxCHECK_MSG( parent, FALSE, wxT("status bar must have a parent") );
+
SetName(name);
+ SetWindowStyleFlag(style);
SetParent(parent);
- if (id == -1)
- m_windowId = NewControlId();
- else
- m_windowId = id;
+ parent->AddChild(this);
+
+ m_windowId = id == -1 ? NewControlId() : id;
DWORD wstyle = WS_CHILD | WS_VISIBLE;
if ( style & wxST_SIZEGRIP )
return FALSE;
}
- // for some reason, subclassing in the usual way doesn't work at all - many
- // strange things start happening (status bar is not positioned correctly,
- // all methods fail...)
+ // we can't subclass this window as usual because the status bar window
+ // proc processes WM_SIZE and WM_PAINT specially
// SubclassWin(m_hWnd);
- // but we want to process the messages from it still, so must subclass it
- gs_wndprocStatBar = (WNDPROC)GetWindowLong(GetHwnd(), GWL_WNDPROC);
+ // but we want to process the messages from it still, so do custom
+ // subclassing here
+ gs_wndprocStatBar = (WXFARPROC)GetWindowLong(GetHwnd(), GWL_WNDPROC);
SetWindowLong(GetHwnd(), GWL_WNDPROC, (LONG)wxStatusBarProc);
SetWindowLong(GetHwnd(), GWL_USERDATA, (LONG)this);
}
}
-void wxStatusBar95::SetFieldsCount(int nFields, const int widths[])
+void wxStatusBar95::SetFieldsCount(int nFields, const int *widths)
{
// this is Windows limitation
wxASSERT_MSG( (nFields > 0) && (nFields < 255), _T("too many fields") );
return TRUE;
}
-void wxStatusBar95::OnSize(wxSizeEvent& event)
+void wxStatusBar95::DoMoveWindow(int x, int y, int width, int height)
{
- FORWARD_WM_SIZE(GetHwnd(), SIZE_RESTORED,
- event.GetSize().x, event.GetSize().y,
- SendMessage);
+ FORWARD_WM_SIZE(GetHwnd(), SIZE_RESTORED, x, y, SendMessage);
// adjust fields widths to the new size
SetFieldsWidth();