fixed status bar positioning to work both with and without sizers (patch 1199639 by Jamie Gadd)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35351 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -45,6 +45,7 @@ wxMSW:
|
|||||||
- Fixed asynchronous playback of large sound files in wxSound.
|
- Fixed asynchronous playback of large sound files in wxSound.
|
||||||
- Added wxDynamicLibrary::GetSymbolAorW().
|
- Added wxDynamicLibrary::GetSymbolAorW().
|
||||||
- Fixed default size of wxStaticText controls with border being too small.
|
- Fixed default size of wxStaticText controls with border being too small.
|
||||||
|
- Fixed bugs with wxStatusBar positioning (with or withour sizers) (Jamie Gadd)
|
||||||
|
|
||||||
wxGTK:
|
wxGTK:
|
||||||
|
|
||||||
|
@@ -68,6 +68,10 @@ protected:
|
|||||||
// override base class virtual
|
// override base class virtual
|
||||||
void DoMoveWindow(int x, int y, int width, int height);
|
void DoMoveWindow(int x, int y, int width, int height);
|
||||||
|
|
||||||
|
virtual WXLRESULT MSWWindowProc(WXUINT nMsg,
|
||||||
|
WXWPARAM wParam,
|
||||||
|
WXLPARAM lParam);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DECLARE_DYNAMIC_CLASS_NO_COPY(wxStatusBar95)
|
DECLARE_DYNAMIC_CLASS_NO_COPY(wxStatusBar95)
|
||||||
};
|
};
|
||||||
|
@@ -119,7 +119,7 @@ bool wxStatusBar95::Create(wxWindow *parent,
|
|||||||
InheritAttributes();
|
InheritAttributes();
|
||||||
|
|
||||||
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR));
|
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR));
|
||||||
|
|
||||||
// we must refresh the frame size when the statusbar is created, because
|
// we must refresh the frame size when the statusbar is created, because
|
||||||
// its client area might change
|
// its client area might change
|
||||||
wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
|
wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
|
||||||
@@ -279,18 +279,17 @@ bool wxStatusBar95::GetFieldRect(int i, wxRect& rect) const
|
|||||||
|
|
||||||
void wxStatusBar95::DoMoveWindow(int x, int y, int width, int height)
|
void wxStatusBar95::DoMoveWindow(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
// the status bar wnd proc must be forwarded the WM_SIZE message whenever
|
if ( GetParent()->IsSizeDeferred() )
|
||||||
// the stat bar position/size is changed because it normally positions the
|
{
|
||||||
// control itself along bottom or top side of the parent window - failing
|
wxWindowMSW::DoMoveWindow(x, y, width, height);
|
||||||
// to do so will result in nasty visual effects
|
}
|
||||||
FORWARD_WM_SIZE(GetHwnd(), SIZE_RESTORED, x, y, SendMessage);
|
else
|
||||||
|
{
|
||||||
// but now, when the standard status bar wnd proc did all it wanted to do,
|
// parent pos/size isn't deferred so do it now but don't send
|
||||||
// move the status bar to its correct location - usually this call may be
|
// WM_WINDOWPOSCHANGING since we don't want to change pos/size later
|
||||||
// omitted because for normal status bars (positioned along the bottom
|
::SetWindowPos(GetHwnd(), NULL, x, y, width, height,
|
||||||
// edge) the position is already set correctly, but if the user wants to
|
SWP_NOZORDER | SWP_NOSENDCHANGING);
|
||||||
// position them in some exotic location, this is really needed
|
}
|
||||||
wxWindowMSW::DoMoveWindow(x, y, width, height);
|
|
||||||
|
|
||||||
// adjust fields widths to the new size
|
// adjust fields widths to the new size
|
||||||
SetFieldsWidth();
|
SetFieldsWidth();
|
||||||
@@ -340,5 +339,46 @@ void wxStatusBar95::SetStatusStyles(int n, const int styles[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WXLRESULT
|
||||||
|
wxStatusBar95::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
|
||||||
|
{
|
||||||
|
if ( nMsg == WM_WINDOWPOSCHANGING )
|
||||||
|
{
|
||||||
|
WINDOWPOS *lpPos = (WINDOWPOS *)lParam;
|
||||||
|
int x, y, w, h;
|
||||||
|
GetPosition(&x, &y);
|
||||||
|
GetSize(&w, &h);
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return wxStatusBarBase::MSWWindowProc(nMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
#endif // __WIN95__ && wxUSE_NATIVE_STATUSBAR
|
#endif // __WIN95__ && wxUSE_NATIVE_STATUSBAR
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user