diff --git a/include/wx/msw/textctrl.h b/include/wx/msw/textctrl.h index 5354104c74..ee8d91971f 100644 --- a/include/wx/msw/textctrl.h +++ b/include/wx/msw/textctrl.h @@ -125,10 +125,11 @@ public: int GetRichVersion() const { return m_verRichEdit; } bool IsRich() const { return m_verRichEdit != 0; } - // rich edit controls are not compatible with normal ones and wem ust set - // the colours for them otherwise + // rich edit controls are not compatible with normal ones and we must set + // the colours and font for them otherwise virtual bool SetBackgroundColour(const wxColour& colour); virtual bool SetForegroundColour(const wxColour& colour); + virtual bool SetFont(const wxFont& font); #else bool IsRich() const { return false; } #endif // wxUSE_RICHEDIT diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index d5e40992c3..d9376ed756 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -2360,6 +2360,26 @@ bool wxTextCtrl::SetForegroundColour(const wxColour& colour) return true; } +bool wxTextCtrl::SetFont(const wxFont& font) +{ + if ( !wxTextCtrlBase::SetFont(font) ) + return false; + + if ( IsRich() ) + { + // Using WM_SETFONT doesn't work reliably with rich edit controls: as + // an example, if we set a fixed width font for a richedit 4.1 control, + // it's used for the ASCII characters but inserting any non-ASCII ones + // switches the font to a proportional one, whether it's done + // programmatically or not. So just use EM_SETCHARFORMAT for this too. + wxTextAttr attr; + attr.SetFont(font); + SetDefaultStyle(attr); + } + + return true; +} + // ---------------------------------------------------------------------------- // styling support for rich edit controls // ----------------------------------------------------------------------------