diff --git a/src/generic/textdlgg.cpp b/src/generic/textdlgg.cpp index 912b46ef00..b9d2e10995 100644 --- a/src/generic/textdlgg.cpp +++ b/src/generic/textdlgg.cpp @@ -97,7 +97,11 @@ bool wxTextEntryDialog::Create(wxWindow *parent, topsizer->Add(CreateTextSizer(message), flagsBorder2); #endif - // 2) text ctrl + // 2) text ctrl: create it with wxTE_RICH2 style to allow putting more than + // 64KiB of text into it + if ( style & wxTE_MULTILINE ) + style |= wxTE_RICH2; + m_textctrl = new wxTextCtrl(this, wxID_TEXT, value, wxDefaultPosition, wxSize(300, wxDefaultCoord), style & ~wxTextEntryDialogStyle); diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index 4e06cff953..dfd2b08f10 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -583,7 +583,22 @@ bool wxTextCtrl::MSWCreateText(const wxString& value, m_updatesCount = -2; if ( !MSWCreateControl(windowClass.t_str(), msStyle, pos, size, valueWin) ) + { + // There is one case in which window creation may realistically fail + // and this is when we create a plain EDIT control with too long text, + // so try to detect this and transparently switch to using RICHEDIT in + // this case (note that the exact length cut off is unknown and might + // be system-dependent, but even though plain EDIT works for texts + // longer than 64KiB, we don't lose much by trying to use RICHEDIT if + // creating it failed). + if ( !HasFlag(wxTE_RICH | wxTE_RICH2) && value.length() >= 0x10000 ) + { + m_windowStyle |= wxTE_RICH2; + return MSWCreateText(value, pos, size); + } + return false; + } m_updatesCount = -1; diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 87d3486ae8..449ad39e3f 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -4049,8 +4049,8 @@ WXHWND wxWindowMSW::MSWCreateWindowAtAnyPosition(WXDWORD exStyle, const wxChar* { wxLogLastError(wxString::Format ( - wxT("CreateWindowEx(\"%s\", flags=%08lx, ex=%08lx)"), - clName, style, exStyle + wxT("CreateWindowEx(\"%s\", flags=%08lx, ex=%08lx, title-len=%zu)"), + clName, style, exStyle, title ? wxStrlen(title) : 0 )); } else if ( !IsTopLevel() && !MSWIsPositionDirectlySupported(x, y) )