-bool wxApp::Initialized()
-{
-    if (GetTopWindow())
-        return TRUE;
-    else
-        return FALSE;
-} // end of wxApp::Initialized
-
-//
-// 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(vHabmain, &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
-            //
-            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(vHabmain, &vMsg);
-                    }
-                }
-                svSavedMessages.Empty();
-            }
-        }
-#endif // wxUSE_THREADS
-
-        // Process the message
-        if (!ProcessMessage((WXMSG *)&svCurrentMsg) )
-        {
-            ::WinDispatchMsg(vHabmain, (PQMSG)&svCurrentMsg);
-        }
-    }
-    return TRUE;
-} // end of wxApp::DoMessage
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// 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 (!Pending() && ProcessIdle())
-        {
-        }
-        DoMessage();
-    }
-    return (int)svCurrentMsg.mp1;
-} // end of wxApp::MainLoop
-
-//
-// Returns TRUE if more time is needed.
-//
-bool wxApp::ProcessIdle()
-{
-    wxIdleEvent                     vEvent;
-
-    vEvent.SetEventObject(this);
-    ProcessEvent(vEvent);
-    return vEvent.MoreRequested();
-} // end of wxApp::ProcessIdle
-
-void wxApp::ExitMainLoop()
-{
-    m_bKeepGoing = FALSE;
-}
-
-bool wxApp::Pending()
-{
-    return (::WinPeekMsg(vHabmain, (PQMSG)&svCurrentMsg, (HWND)NULL, 0, 0, PM_NOREMOVE) != 0);
-}
-
-void wxApp::Dispatch()
-{
-    DoMessage();
-}
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// Give all windows a chance to preprocess
-// the message. Some may have accelerator tables, or have
-// MDI complications.
-//
-//////////////////////////////////////////////////////////////////////////////
-bool wxApp::ProcessMessage(
-  WXMSG*                            pWxmsg
-)
-{
-    QMSG*                           vMsg = (PQMSG)pWxmsg;
-    HWND                            hWnd = vMsg->hwnd;
-    wxWindow*                       pWndThis = wxFindWinFromHandle((WXHWND)hWnd);
-    wxWindow*                       pWnd;
-
-#if wxUSE_TOOLTIPS
-    //
-    // We must relay WM_MOUSEMOVE events to the tooltip ctrl if we want it to
-    // popup the tooltip bubbles
-    //
-    if (pWndThis && (vMsg->msg == WM_MOUSEMOVE))
-    {
-        wxToolTip*                  pToolTip = pWndThis->GetToolTip();
-        if (pToolTip)
-        {
-            pToolTip->RelayEvent(pWxmsg);
-        }
-    }
-#endif // wxUSE_TOOLTIPS
-
-    //
-    // For some composite controls (like a combobox), wndThis might be NULL
-    // because the subcontrol is not a wxWindow, but only the control itself
-    // is - try to catch this case
-    //
-    while (hWnd && !pWndThis)
-    {
-        hWnd = ::WinQueryWindow(hWnd, QW_PARENT);
-        pWndThis = wxFindWinFromHandle((WXHWND)hWnd);
-    }
-
-    //
-    // Anyone for a non-translation message? Try youngest descendants first.
-    //
-    for (pWnd = pWndThis; pWnd; pWnd = pWnd->GetParent())
-    {
-        if (pWnd->OS2ProcessMessage(pWxmsg))
-            return TRUE;
-    }
-    return FALSE;
-} // end of wxApp::ProcessMessage