+void wxStaticText::SetLabel(const wxString& label)
+{
+ long styleReal = ::GetWindowLong(GetHwnd(), GWL_STYLE);
+ if ( HasFlag(wxST_ELLIPSIZE_END) &&
+ wxGetOsVersion() == wxOS_WINDOWS_NT )
+ {
+ // adding SS_ENDELLIPSIS or SS_ENDELLIPSIS "disables" the correct
+ // newline handling in static texts: the newlines in the labels are
+ // shown as square. Thus we don't use it even on newer OS when
+ // the static label contains a newline.
+ if ( label.Contains(wxT('\n')) )
+ styleReal &= ~SS_ENDELLIPSIS;
+ else
+ styleReal |= SS_ENDELLIPSIS;
+
+ ::SetWindowLong(GetHwnd(), GWL_STYLE, styleReal);
+ }
+ else // style not supported natively
+ {
+ styleReal &= ~SS_ENDELLIPSIS;
+ ::SetWindowLong(GetHwnd(), GWL_STYLE, styleReal);
+ }
+
+ // this call will save the label in m_labelOrig and set it into this window
+ // (through wxWindow::SetLabel)
+ m_labelOrig = label;
+
+ if ((styleReal & SS_ENDELLIPSIS) == 0)
+ DoSetLabel(GetEllipsizedLabelWithoutMarkup());
+ else
+ DoSetLabel(RemoveMarkup(label));
+
+ // adjust the size of the window to fit to the label unless autoresizing is
+ // disabled
+ if ( !HasFlag(wxST_NO_AUTORESIZE) &&
+ !IsEllipsized() ) // if ellipsize is ON, then we don't want to get resized!
+ {
+ InvalidateBestSize();
+ DoSetSize(wxDefaultCoord, wxDefaultCoord, wxDefaultCoord, wxDefaultCoord,
+ wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
+ }
+}
+
+bool wxStaticText::SetFont(const wxFont& font)
+{
+ bool ret = wxControl::SetFont(font);
+
+ // adjust the size of the window to fit to the label unless autoresizing is
+ // disabled
+ if ( !HasFlag(wxST_NO_AUTORESIZE) )
+ {
+ InvalidateBestSize();
+ DoSetSize(wxDefaultCoord, wxDefaultCoord, wxDefaultCoord, wxDefaultCoord,
+ wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
+ }
+
+ return ret;
+}
+
+// for wxST_ELLIPSIZE_* support:
+
+wxString wxStaticText::DoGetLabel() const
+{
+ return wxGetWindowText(GetHwnd());
+}
+
+void wxStaticText::DoSetLabel(const wxString& str)
+{
+ SetWindowText(GetHwnd(), str.c_str());
+}
+