+// ----------------------------------------------------------------------------
+// wxMessageOutputBest
+// ----------------------------------------------------------------------------
+
+#ifdef __WINDOWS__
+
+// check if we're running in a console under Windows
+static inline bool IsInConsole()
+{
+#ifdef __WXWINCE__
+    return false;
+#else // !__WXWINCE__
+    HANDLE hStdErr = ::GetStdHandle(STD_ERROR_HANDLE);
+    return hStdErr && hStdErr != INVALID_HANDLE_VALUE;
+#endif // __WXWINCE__/!__WXWINCE__
+}
+
+#endif // __WINDOWS__
+
+void wxMessageOutputBest::Output(const wxString& str)
+{
+#ifdef __WINDOWS__
+    if ( !IsInConsole() )
+    {
+        ::MessageBox(NULL, str.wx_str(), _T("wxWidgets"),
+                     MB_ICONINFORMATION | MB_OK);
+    }
+    else
+#endif // __WINDOWS__/!__WINDOWS__
+    {
+        const wxWX2MBbuf buf = str.mb_str();
+
+        if ( buf )
+            fprintf(stderr, "%s", (const char*) buf);
+        else // print at least something
+            fprintf(stderr, "%s", (const char*) str.ToAscii());
+    }
+}
+
+// ----------------------------------------------------------------------------
+// wxMessageOutputStderr
+// ----------------------------------------------------------------------------
+
+void wxMessageOutputStderr::Output(const wxString& str)
+{
+    const wxWX2MBbuf buf = str.mb_str();
+
+    if ( buf )
+        fprintf(stderr, "%s", (const char*) buf);
+    else // print at least something
+        fprintf(stderr, "%s", (const char*) str.ToAscii());
+}
+
+// ----------------------------------------------------------------------------
+// wxMessageOutputDebug
+// ----------------------------------------------------------------------------
+
+void wxMessageOutputDebug::Output(const wxString& str)
+{
+    wxString out(str);
+
+#if defined(__WXMSW__) && !defined(__WXMICROWIN__)
+    out.Replace(wxT("\t"), wxT("        "));
+    out.Replace(wxT("\n"), wxT("\r\n"));
+    ::OutputDebugString(out.wx_str());
+#elif defined(__WXMAC__) && !defined(__DARWIN__)
+    if ( wxIsDebuggerRunning() )
+    {
+        Str255 pstr;
+        wxString output = out + wxT(";g") ;
+        wxMacStringToPascal(output.c_str(), pstr);
+
+        #ifdef __powerc
+            DebugStr(pstr);
+        #else
+            SysBreakStr(pstr);
+        #endif
+    }
+#else
+    wxFputs( out , stderr ) ;
+    if ( out.Right(1) != wxT("\n") )
+        wxFputs( wxT("\n") , stderr ) ;
+    fflush( stderr ) ;
+#endif // platform
+}