nim_duilib/base/framework/win_ui_message_pump.h
jiajia_deng 4933d1f2bc Remove dependency on shared
Signed-off-by: jiajia_deng <2894220@gmail.com>
2019-09-20 16:27:58 +08:00

65 lines
1.6 KiB
C++

// 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提取并处理消息队列中的WM_PAINT消息
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();
// 用来接收自定义消息的隐藏窗口
HWND message_hwnd_;
// UIObserver列表
ObserverList<UIObserver> observers_;
};
} // namespace nbase
#endif // OS_WIN
#endif // BASE_FRAMEWORK_WIN_UI_MESSAGE_PUMP_H_