+const wxString punct = " ,.-;:!?";
+
+void wxStaticText::DrawParagraph(wxDC &dc, wxString paragraph)
+{
+ int x = 0 ;
+ int y = 0 ;
+ int i = 0 ;
+ long width, height ;
+ bool linedrawn = true;
+ while( paragraph.Length() > 0 )
+ {
+ dc.GetTextExtent( paragraph , &width , &height ) ;
+
+ if ( width > m_width )
+ {
+ for ( int p = paragraph.Length() -1 ; p > 0 ; --p )
+ {
+ if ((punct.Find(paragraph[p]) != wxNOT_FOUND) || !linedrawn)
+ {
+ int blank = (paragraph[p] == ' ') ? 0 : 1;
+
+ dc.GetTextExtent( paragraph.Left(p + blank) , &width , &height ) ;
+
+ if ( width <= m_width )
+ {
+ int pos = x ;
+ if ( HasFlag( wxALIGN_CENTER ) )
+ {
+ pos += ( m_width - width ) / 2 ;
+ }
+ else if ( HasFlag( wxALIGN_RIGHT ) )
+ {
+ pos += ( m_width - width ) ;
+ }
+
+ dc.DrawText( paragraph.Left(p + blank), pos , y) ;
+ y += height ;
+ paragraph = paragraph.Mid(p+1) ;
+ linedrawn = true;
+ break ;
+ }
+ }
+ }
+
+ linedrawn = false;
+ }
+ else
+ {
+ int pos = x ;
+ if ( HasFlag( wxALIGN_CENTER ) )
+ {
+ pos += ( m_width - width ) / 2 ;
+ }
+ else if ( HasFlag( wxALIGN_RIGHT ) )
+ {
+ pos += ( m_width - width ) ;
+ }
+
+ dc.DrawText( paragraph, pos , y) ;
+ paragraph="";
+ y += height ;
+ }
+ }
+}