X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6b5c56bd5fa167a02334d35deb0006e80cdfd44d..46562151eb21235344768ea4b53c204d0c03fcee:/src/msw/statbr95.cpp?ds=sidebyside diff --git a/src/msw/statbr95.cpp b/src/msw/statbr95.cpp index 5f49a73018..82773a5d17 100644 --- a/src/msw/statbr95.cpp +++ b/src/msw/statbr95.cpp @@ -9,10 +9,6 @@ // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "statbr95.h" -#endif - // for compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -120,6 +116,14 @@ bool wxStatusBar95::Create(wxWindow *parent, SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR)); + // we must refresh the frame size when the statusbar is created, because + // its client area might change + wxFrame *frame = wxDynamicCast(GetParent(), wxFrame); + if ( frame ) + { + frame->SendSizeEvent(); + } + return true; } @@ -269,20 +273,23 @@ bool wxStatusBar95::GetFieldRect(int i, wxRect& rect) const return true; } +#ifndef SWP_NOSENDCHANGING +#define SWP_NOSENDCHANGING 0 +#endif + 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); + if ( GetParent()->IsSizeDeferred() ) + { + wxWindowMSW::DoMoveWindow(x, y, width, height); + } + else + { + // parent pos/size isn't deferred so do it now but don't send + // WM_WINDOWPOSCHANGING since we don't want to change pos/size later + ::SetWindowPos(GetHwnd(), NULL, x, y, width, height, + SWP_NOZORDER | SWP_NOSENDCHANGING); + } // adjust fields widths to the new size SetFieldsWidth(); @@ -332,5 +339,52 @@ void wxStatusBar95::SetStatusStyles(int n, const int styles[]) } } +WXLRESULT +wxStatusBar95::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) +{ +#ifndef __WXWINCE__ + if ( nMsg == WM_WINDOWPOSCHANGING ) + { + WINDOWPOS *lpPos = (WINDOWPOS *)lParam; + int x, y, w, h; + GetPosition(&x, &y); + GetSize(&w, &h); + + // we need real window coords and not wx client coords + AdjustForParentClientOrigin(x, y); + + lpPos->x = x; + lpPos->y = y; + lpPos->cx = w; + lpPos->cy = h; + + return 0; + } + + if ( nMsg == WM_NCLBUTTONDOWN ) + { + // if hit-test is on gripper then send message to TLW to begin + // resizing. It is possible to send this message to any window. + if ( wParam == HTBOTTOMRIGHT ) + { + wxWindow *win; + + for ( win = GetParent(); win; win = win->GetParent() ) + { + if ( win->IsTopLevel() ) + { + SendMessage(GetHwndOf(win), WM_NCLBUTTONDOWN, + wParam, lParam); + + return 0; + } + } + } + } +#endif + + return wxStatusBarBase::MSWWindowProc(nMsg, wParam, lParam); +} + #endif // __WIN95__ && wxUSE_NATIVE_STATUSBAR