X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/355ce7adea8043d72e02cd00aa7f475f3b3be92d..f79f06665c112b6eb081216d66589cad189fa166:/src/msw/statusbar.cpp diff --git a/src/msw/statusbar.cpp b/src/msw/statusbar.cpp index d0fe3d05fc..48960afe22 100644 --- a/src/msw/statusbar.cpp +++ b/src/msw/statusbar.cpp @@ -84,25 +84,17 @@ wxStatusBar::wxStatusBar() m_pDC = NULL; } -bool wxStatusBar::Create(wxWindow *parent, - wxWindowID id, - long style, - const wxString& name) +WXDWORD wxStatusBar::MSWGetStyle(long style, WXDWORD *exstyle) const { - wxCHECK_MSG( parent, false, "status bar must have a parent" ); - - SetName(name); - SetWindowStyleFlag(style); - SetParent(parent); - - parent->AddChild(this); - - m_windowId = id == wxID_ANY ? NewControlId() : id; + WXDWORD msStyle = wxStatusBarBase::MSWGetStyle(style, exstyle); - DWORD wstyle = WS_CHILD | WS_VISIBLE; - - if ( style & wxCLIP_SIBLINGS ) - wstyle |= WS_CLIPSIBLINGS; + // wxSTB_SIZEGRIP is part of our default style but it doesn't make sense to + // show size grip if this is the status bar of a non-resizable TLW so turn + // it off in such case + wxWindow * const parent = GetParent(); + wxCHECK_MSG( parent, msStyle, wxS("Status bar must have a parent") ); + if ( parent->IsTopLevel() && !parent->HasFlag(wxRESIZE_BORDER) ) + style &= ~wxSTB_SIZEGRIP; // setting SBARS_SIZEGRIP is perfectly useless: it's always on by default // (at least in the version of comctl32.dll I'm using), and the only way to @@ -111,47 +103,38 @@ bool wxStatusBar::Create(wxWindow *parent, // is not given if ( !(style & wxSTB_SIZEGRIP) ) { - wstyle |= CCS_TOP; + msStyle |= CCS_TOP; } else { #ifndef __WXWINCE__ // may be some versions of comctl32.dll do need it - anyhow, it won't // do any harm - wstyle |= SBARS_SIZEGRIP; + msStyle |= SBARS_SIZEGRIP; #endif } - m_hWnd = CreateWindow - ( - STATUSCLASSNAME, - wxT(""), - wstyle, - 0, 0, 0, 0, - GetHwndOf(parent), - (HMENU)wxUIntToPtr(m_windowId.GetValue()), - wxGetInstance(), - NULL - ); - if ( m_hWnd == 0 ) - { - wxLogSysError(_("Failed to create a status bar.")); + return msStyle; +} +bool wxStatusBar::Create(wxWindow *parent, + wxWindowID id, + long style, + const wxString& name) +{ + if ( !CreateControl(parent, id, wxDefaultPosition, wxDefaultSize, + style, wxDefaultValidator, name) ) + return false; + + if ( !MSWCreateControl(STATUSCLASSNAME, wxString(), + wxDefaultPosition, wxDefaultSize) ) return false; - } SetFieldsCount(1); - SubclassWin(m_hWnd); // cache the DC instance used by DoUpdateStatusText: - // NOTE: create the DC before calling InheritAttributes() since - // it may result in a call to our SetFont() m_pDC = new wxClientDC(this); - InheritAttributes(); - - SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR)); - // we must refresh the frame size when the statusbar is created, because // its client area might change // @@ -173,11 +156,7 @@ wxStatusBar::~wxStatusBar() // delete existing tooltips for (size_t i=0; i 0) && (nFields < 255), "too many fields" ); - wxStatusBarBase::SetFieldsCount(nFields, widths); - - MSWUpdateFieldsWidths(); - // keep in synch also our m_tooltips array // reset all current tooltips for (size_t i=0; i