From d94de683a60b20153591cc3f8f52a97cf9ce9453 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 29 Jul 2007 13:38:34 +0000 Subject: [PATCH] update button style to include BS_MULTILINE when a multiline label is set git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47815 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/button.h | 12 ++++++------ src/msw/button.cpp | 22 ++++++++++++++++++++-- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/include/wx/msw/button.h b/include/wx/msw/button.h index 7fc7e0f0a2..33d8272b2b 100644 --- a/include/wx/msw/button.h +++ b/include/wx/msw/button.h @@ -45,15 +45,16 @@ public: virtual wxWindow *SetDefault(); + // overridden base class methods + virtual void SetLabel(const wxString& label); + virtual bool SetBackgroundColour(const wxColour &colour); + virtual bool SetForegroundColour(const wxColour &colour); + // implementation from now on virtual void Command(wxCommandEvent& event); virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); virtual bool MSWCommand(WXUINT param, WXWORD id); - // coloured buttons support - virtual bool SetBackgroundColour(const wxColour &colour); - virtual bool SetForegroundColour(const wxColour &colour); - virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item); virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; @@ -78,5 +79,4 @@ private: DECLARE_DYNAMIC_CLASS_NO_COPY(wxButton) }; -#endif - // _WX_BUTTON_H_ +#endif // _WX_BUTTON_H_ diff --git a/src/msw/button.cpp b/src/msw/button.cpp index 01ebb8539b..64e4790923 100644 --- a/src/msw/button.cpp +++ b/src/msw/button.cpp @@ -182,8 +182,7 @@ bool wxButton::Create(wxWindow *parent, // black boxes) // // NB: we do it here and not in MSWGetStyle() because we need the label - // value and m_label is not set yet when MSWGetStyle() is called; - // besides changing BS_MULTILINE during run-time is pointless anyhow + // value and the label is not set yet when MSWGetStyle() is called if ( label.find(_T('\n')) != wxString::npos ) { msStyle |= BS_MULTILINE; @@ -237,6 +236,25 @@ WXDWORD wxButton::MSWGetStyle(long style, WXDWORD *exstyle) const return msStyle; } +void wxButton::SetLabel(const wxString& label) +{ + // update BS_MULTILINE style depending on the new label (resetting it + // doesn't seem to do anything very useful but it shouldn't hurt and we do + // have to set it whenever the label becomes multi line as otherwise it + // wouldn't be shown correctly) + long styleOld = ::GetWindowLong(GetHwnd(), GWL_STYLE), + styleNew; + if ( label.find(_T('\n')) != wxString::npos ) + styleNew = styleOld | BS_MULTILINE; + else + styleNew = styleOld & ~BS_MULTILINE; + + if ( styleNew != styleOld ) + ::SetWindowLong(GetHwnd(), GWL_STYLE, styleNew); + + wxButtonBase::SetLabel(label); +} + // ---------------------------------------------------------------------------- // size management including autosizing // ---------------------------------------------------------------------------- -- 2.45.2