implement event loop for console applications (heavily modified patch 1715735)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46029 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -12,31 +12,43 @@
|
||||
#ifndef _WX_MSW_EVTLOOP_H_
|
||||
#define _WX_MSW_EVTLOOP_H_
|
||||
|
||||
#if wxUSE_GUI
|
||||
#include "wx/window.h"
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxEventLoop
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxEventLoop : public wxEventLoopManual
|
||||
class WXDLLIMPEXP_BASE wxMSWEventLoopBase : public wxEventLoopManual
|
||||
{
|
||||
public:
|
||||
wxEventLoop();
|
||||
wxMSWEventLoopBase();
|
||||
|
||||
// implement base class pure virtuals
|
||||
virtual bool Pending() const;
|
||||
virtual bool Dispatch();
|
||||
|
||||
// MSW-specific methods
|
||||
// --------------------
|
||||
protected:
|
||||
// get the next message from queue and return true or return false if we
|
||||
// got WM_QUIT or an error occurred
|
||||
bool GetNextMessage(WXMSG *msg);
|
||||
};
|
||||
|
||||
#if wxUSE_GUI
|
||||
|
||||
class WXDLLIMPEXP_CORE wxGUIEventLoop : public wxMSWEventLoopBase
|
||||
{
|
||||
public:
|
||||
wxGUIEventLoop() { }
|
||||
|
||||
// process a single message: calls PreProcessMessage() before dispatching
|
||||
// it
|
||||
virtual void ProcessMessage(WXMSG *msg);
|
||||
|
||||
// preprocess a message, return true if processed (i.e. no further
|
||||
// dispatching required)
|
||||
virtual bool PreProcessMessage(WXMSG *msg);
|
||||
|
||||
// process a single message
|
||||
virtual void ProcessMessage(WXMSG *msg);
|
||||
|
||||
// set the critical window: this is the window such that all the events
|
||||
// except those to this window (and its children) stop to be processed
|
||||
// (typical examples: assert or crash report dialog)
|
||||
@@ -52,11 +64,14 @@ public:
|
||||
return !ms_winCritical || IsChildOfCriticalWindow(win);
|
||||
}
|
||||
|
||||
protected:
|
||||
// override/implement base class virtuals
|
||||
virtual bool Dispatch();
|
||||
virtual void WakeUp();
|
||||
|
||||
protected:
|
||||
virtual void OnNextIteration();
|
||||
|
||||
private:
|
||||
// check if the given window is a child of ms_winCritical (which must be
|
||||
// non NULL)
|
||||
static bool IsChildOfCriticalWindow(wxWindowMSW *win);
|
||||
@@ -66,4 +81,21 @@ protected:
|
||||
static wxWindowMSW *ms_winCritical;
|
||||
};
|
||||
|
||||
#else // !wxUSE_GUI
|
||||
|
||||
class WXDLLIMPEXP_BASE wxConsoleEventLoop : public wxMSWEventLoopBase
|
||||
{
|
||||
public:
|
||||
wxConsoleEventLoop() { }
|
||||
|
||||
// override/implement base class virtuals
|
||||
virtual bool Dispatch();
|
||||
virtual void WakeUp();
|
||||
|
||||
protected:
|
||||
virtual void OnNextIteration();
|
||||
};
|
||||
|
||||
#endif // wxUSE_GUI/!wxUSE_GUI
|
||||
|
||||
#endif // _WX_MSW_EVTLOOP_H_
|
||||
|
Reference in New Issue
Block a user