From 98e19a586324fe2e59a9a6e3c5bc7dca5209d95d Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 20 Dec 2002 00:18:35 +0000 Subject: [PATCH] fixed SetSelection() (and hence SetInsertionPoint()) behaviour when using richedit 3.0 with wxTE_RICH2 style and the control doesn't have focus git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18359 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/textctrl.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index cae21829e3..168ce7cf5f 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -1006,6 +1006,26 @@ void wxTextCtrl::DoSetSelection(long from, long to, bool scrollCaret) #if wxUSE_RICHEDIT if ( IsRich() ) { + // richedit 3.0 (i.e. the version living in riched20.dll distributed + // with Windows 2000 and beyond) doesn't honour EM_SCROLLCARET when + // emulating richedit 2.0 unless the control has focus or ECO_NOHIDESEL + // option is set (but it does work ok in richedit 1.0 mode...) + // + // so to make it work we either need to give focus to it here which + // will probably create many problems (dummy focus events; window + // containing the text control being brought to foreground + // unexpectedly; ...) or to temporarily set ECO_NOHIDESEL which may + // create other problems too -- or it might not, so let's try to do it + if ( GetRichVersion() > 1 ) + { + if ( !HasFlag(wxTE_NOHIDESEL) ) + { + ::SendMessage(GetHwnd(), EM_SETOPTIONS, + ECOOP_OR, ECO_NOHIDESEL); + } + //else: everything is already ok + } + CHARRANGE range; range.cpMin = from; range.cpMax = to; @@ -1021,6 +1041,16 @@ void wxTextCtrl::DoSetSelection(long from, long to, bool scrollCaret) { SendMessage(hWnd, EM_SCROLLCARET, (WPARAM)0, (LPARAM)0); } + +#if wxUSE_RICHEDIT + // restore ECO_NOHIDESEL if we changed it + if ( GetRichVersion() > 1 && !HasFlag(wxTE_NOHIDESEL) ) + { + ::SendMessage(GetHwnd(), EM_SETOPTIONS, + ECOOP_AND, ~ECO_NOHIDESEL); + } +#endif // wxUSE_RICHEDIT + #else // Win16 // WPARAM is 0: selection is scrolled into view SendMessage(hWnd, EM_SETSEL, (WPARAM)0, (LPARAM)MAKELONG(from, to)); -- 2.45.2