nim_duilib/base/framework/win_ui_message_pump.h

65 lines
1.6 KiB
C
Raw Normal View History

2019-04-19 17:19:57 +08:00
// a implemention of a Windows specific message pump for user interface,
// the mechanism of which is from the Google Chrome project
#ifndef BASE_FRAMEWORK_WIN_UI_MESSAGE_PUMP_H_
#define BASE_FRAMEWORK_WIN_UI_MESSAGE_PUMP_H_
#include "base/framework/win_message_pump.h"
#if defined(OS_WIN)
#include <list>
#include "base/framework/observer_list.h"
namespace nbase
{
class BASE_EXPORT WinUIMessagePump: public WinMessagePump
{
public:
static const int kMessageFilterCode = 0x5001;
class BASE_EXPORT UIObserver
{
public:
virtual void PreProcessMessage(const MSG &msg) = 0;
virtual void PostProcessMessage(const MSG &msg) = 0;
};
void AddObserver(UIObserver *observer);
void RemoveObserver(UIObserver *observer);
WinUIMessagePump();
virtual ~WinUIMessagePump();
virtual void ScheduleWork();
virtual void ScheduleDelayedWork(const TimeTicks& delayed_work_time);
// ֪ͨMessagePump<6D><70>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>WM_PAINT<4E><54>Ϣ
void PumpOutPendingPaintMessages();
private:
static LRESULT CALLBACK WndProcThunk(
HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
virtual void DoRunLoop();
virtual void PreProcessMessage(const MSG& msg);
virtual void PostProcessMessage(const MSG& msg);
void InitMessageWnd();
void WaitForWork();
void HandleWorkMessage();
void HandleTimerMessage();
bool ProcessNextWindowsMessage();
bool ProcessMessageHelper(const MSG& msg);
bool ProcessPumpReplacementMessage();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>
HWND message_hwnd_;
// UIObserver<65>б<EFBFBD>
ObserverList<UIObserver> observers_;
};
} // namespace nbase
#endif // OS_WIN
#endif // BASE_FRAMEWORK_WIN_UI_MESSAGE_PUMP_H_