-}
-
-bool wxApp::Initialized()
-{
-    if (GetTopWindow())
-        return TRUE;
-    else
-        return FALSE;
-}
-
-//
-// Get and process a message, returning FALSE if WM_QUIT
-// received (and also set the flag telling the app to exit the main loop)
-//
-bool wxApp::DoMessage()
-{
-    BOOL                            bRc = ::WinGetMsg(m_vHab, &m_vMsg, HWND(NULL), 0, 0);
-
-    if (bRc == 0)
-    {
-        // got WM_QUIT
-        m_bKeepGoing = FALSE;
-        return FALSE;
-    }
-    else if (bRc == -1)
-    {
-        // should never happen, but let's test for it nevertheless
-        wxLogLastError("GetMessage");
-    }
-    else
-    {
-#if wxUSE_THREADS
-        wxASSERT_MSG( wxThread::IsMain()
-                     ,wxT("only the main thread can process Windows messages")
-                    );
-
-        static bool                 sbHadGuiLock = TRUE;
-        static wxMsgArray           svSavedMessages;
-
-        //
-        // if a secondary thread owns is doing GUI calls, save all messages for
-        // later processing - we can't process them right now because it will
-        // lead to recursive library calls (and we're not reentrant)
-        //
-        if (!wxGuiOwnedByMainThread())
-        {
-            sbHadGuiLock = FALSE;
-
-            // leave out WM_COMMAND messages: too dangerous, sometimes
-            // the message will be processed twice
-            if ( !wxIsWaitingForThread() ||
-                    svCurrentMsg.msg != WM_COMMAND )
-            {
-                svSavedMessages.Add(svCurrentMsg);
-            }
-            return TRUE;
-        }
-        else
-        {
-            //
-            // have we just regained the GUI lock? if so, post all of the saved
-            // messages
-            //
-            // FIXME of course, it's not _exactly_ the same as processing the
-            //       messages normally - expect some things to break...
-            //
-            if (!sbHadGuiLock )
-            {
-                sbHadGuiLock = TRUE;
-
-                size_t             nCount = svSavedMessages.Count();
-
-                for (size_t n = 0; n < nCount; n++)
-                {
-                    QMSG            vMsg = svSavedMessages[n];
-
-                    if ( !ProcessMessage((WXMSG *)&vMsg) )
-                    {
-                        ::WinDispatchMsg(m_vHab, &vMsg);
-                    }
-                }
-                svSavedMessages.Empty();
-            }
-        }
-#endif // wxUSE_THREADS
-
-        // Process the message
-        if (!ProcessMessage((WXMSG *)&svCurrentMsg) )
-        {
-            ::WinDispatchMsg(m_vHab, (PQMSG)&svCurrentMsg);
-        }
-    }
-    return TRUE;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// Keep trying to process messages until WM_QUIT
-// received.
-//
-// If there are messages to be processed, they will all be
-// processed and OnIdle will not be called.
-// When there are no more messages, OnIdle is called.
-// If OnIdle requests more time,
-// it will be repeatedly called so long as there are no pending messages.
-// A 'feature' of this is that once OnIdle has decided that no more processing
-// is required, then it won't get processing time until further messages
-// are processed (it'll sit in DoMessage).
-//
-//////////////////////////////////////////////////////////////////////////////
-int wxApp::MainLoop()
-{
-    m_bKeepGoing = TRUE;
-
-    while (m_bKeepGoing)
-    {
-#if wxUSE_THREADS
-        wxMutexGuiLeaveOrEnter();
-#endif // wxUSE_THREADS
-        while (!::WinPeekMsg(m_vHab, &svCurrentMsg, (HWND)NULL, 0, 0, PM_NOREMOVE) &&
-                ProcessIdle() )
-        {
-        }
-        DoMessage();
-    }
-    return (int)svCurrentMsg.mp1;
-}
-
-//
-// Returns TRUE if more time is needed.
-//
-bool wxApp::ProcessIdle()
-{
-    wxIdleEvent                     vEvent;
-
-    vEvent.SetEventObject(this);
-    ProcessEvent(vEvent);
-    return vEvent.MoreRequested();
-}
-
-#if wxUSE_THREADS
-void wxApp::ProcessPendingEvents()
-{
-    wxNode*                         pNode = wxPendingEvents->First();
-    wxCriticalSectionLocker         vLocker(*wxPendingEventsLocker);
-
-    while (pNode)
-    {
-        wxEvtHandler*               pHandler = (wxEvtHandler *)pNode->Data();
-        pHandler->ProcessPendingEvents();
-
-        delete pNode;
-        pNode = wxPendingEvents->First();
-    }
-}