-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, &svCurrentMsg, HWND(NULL), 0, 0);
-
-// wxUsleep(1000);
- 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