+#if !wxUSE_UNICODE_MSLU
+
+wxString
+wxTextCtrl::StreamOut(wxFontEncoding encoding, bool selectionOnly) const
+{
+ wxString out;
+
+ const int len = GetWindowTextLength(GetHwnd());
+
+#if wxUSE_WCHAR_T
+ wxWCharBuffer wchBuf(len);
+ wchar_t *wpc = wchBuf.data();
+#else
+ wchar_t *wchBuf = (wchar_t *)malloc((len + 1)*sizeof(wchar_t));
+ wchar_t *wpc = wchBuf;
+#endif
+
+ EDITSTREAM eds;
+ wxZeroMemory(eds);
+ eds.dwCookie = (DWORD)&wpc;
+ eds.pfnCallback = wxRichEditStreamOut;
+
+ ::SendMessage
+ (
+ GetHwnd(),
+ EM_STREAMOUT,
+ SF_TEXT | SF_UNICODE | (selectionOnly ? SFF_SELECTION : 0),
+ (LPARAM)&eds
+ );
+
+ if ( eds.dwError )
+ {
+ wxLogLastError(_T("EM_STREAMOUT"));
+ }
+ else // streamed out ok
+ {
+ // now convert to the given encoding (this is a lossful conversion but
+ // what else can we do)
+ wxCSConv conv(encoding);
+ size_t lenNeeded = conv.WC2MB(NULL, wchBuf, len);
+ if ( lenNeeded )
+ {
+ conv.WC2MB(wxStringBuffer(out, lenNeeded), wchBuf, len);
+ }
+ }
+
+#if !wxUSE_WCHAR_T
+ free(wchBuf);
+#endif // !wxUSE_WCHAR_T
+
+ return out;
+}
+
+#endif // !wxUSE_UNICODE_MSLU
+