+ // have to send a (dummy) WM_SIZE to redraw it now
+ SendMessage(GetHwnd(), WM_SIZE, 0, 0);
+}
+
+bool wxStatusBar95::GetFieldRect(int i, wxRect& rect) const
+{
+ wxCHECK_MSG( (i >= 0) && (i < m_nFields), FALSE,
+ _T("invalid statusbar field index") );
+
+ RECT r;
+ if ( !::SendMessage(GetHwnd(), SB_GETRECT, i, (LPARAM)&r) )
+ {
+ wxLogLastError(wxT("SendMessage(SB_GETRECT)"));
+ }
+
+ wxCopyRECTToRect(r, rect);
+
+ return TRUE;
+}
+
+void wxStatusBar95::DoMoveWindow(int x, int y, int width, int height)
+{
+ // the status bar wnd proc must be forwarded the WM_SIZE message whenever
+ // the stat bar position/size is changed because it normally positions the
+ // control itself along bottom or top side of the parent window - failing
+ // to do so will result in nasty visual effects
+ FORWARD_WM_SIZE(GetHwnd(), SIZE_RESTORED, x, y, SendMessage);
+
+ // but now, when the standard status bar wnd proc did all it wanted to do,
+ // move the status bar to its correct location - usually this call may be
+ // omitted because for normal status bars (positioned along the bottom
+ // edge) the position is already set correctly, but if the user wants to
+ // position them in some exotic location, this is really needed
+ wxWindowMSW::DoMoveWindow(x, y, width, height);
+
+ // adjust fields widths to the new size
+ SetFieldsWidth();
+
+ // we have to trigger wxSizeEvent if there are children window in status
+ // bar because GetFieldRect returned incorrect (not updated) values up to
+ // here, which almost certainly resulted in incorrectly redrawn statusbar
+ if ( m_children.GetCount() > 0 )
+ {
+ wxSizeEvent event(GetClientSize(), m_windowId);
+ event.SetEventObject(this);
+ GetEventHandler()->ProcessEvent(event);
+ }