Mercurial > foo_out_sdl
view foosdk/sdk/foobar2000/SDK/message_loop.h @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
line wrap: on
line source
#pragma once #ifdef _WIN32 //! A message filter class. Allows you to filter incoming messages in main app loop. Use message_loop API to register/unregister, \n //! or derive from message_filter_impl_base to have your class registered/deregistered automatically with lifetime. //! //! Use with caution. Will not be executed during modal loops. class NOVTABLE message_filter { public: //! Notifies you about incoming message. \n //! You can alter the message (not generally recommended), let others handle it (return false) \n //! or signal that you've handled it (return true) to suppress further processing. virtual bool pretranslate_message(MSG * p_msg) = 0; }; //! An idle handler class. Executed when main loop is about to enter idle state. \n //! Use with caution. Will not be executed during modal loops. class NOVTABLE idle_handler { public: virtual bool on_idle() = 0; }; //! Entrypoint API for registering message_filter and idle_handler objects. \n //! Usage: message_loop::get()->add_message_filter(myfilter); class NOVTABLE message_loop : public service_base { public: virtual void add_message_filter(message_filter * ptr) = 0; virtual void remove_message_filter(message_filter * ptr) = 0; virtual void add_idle_handler(idle_handler * ptr) = 0; virtual void remove_idle_handler(idle_handler * ptr) = 0; FB2K_MAKE_SERVICE_COREAPI(message_loop); }; class NOVTABLE message_loop_v2 : public message_loop { public: virtual void add_message_filter_ex(message_filter * ptr, t_uint32 lowest, t_uint32 highest) = 0; FB2K_MAKE_SERVICE_COREAPI_EXTENSION(message_loop_v2, message_loop); }; class message_filter_impl_base : public message_filter { public: message_filter_impl_base(); message_filter_impl_base(t_uint32 lowest, t_uint32 highest); ~message_filter_impl_base(); bool pretranslate_message(MSG * ) override {return false;} PFC_CLASS_NOT_COPYABLE(message_filter_impl_base,message_filter_impl_base); }; class message_filter_impl_accel : public message_filter_impl_base { protected: bool pretranslate_message(MSG * p_msg) override; public: message_filter_impl_accel(HINSTANCE p_instance,const TCHAR * p_accel); void set_wnd(HWND p_wnd) {m_wnd = p_wnd;} private: HWND m_wnd = NULL; win32_accelerator m_accel; PFC_CLASS_NOT_COPYABLE(message_filter_impl_accel,message_filter_impl_accel); }; class message_filter_remap_f1 : public message_filter_impl_base { public: bool pretranslate_message(MSG * p_msg) override; void set_wnd(HWND wnd) {m_wnd = wnd;} private: static bool IsOurMsg(const MSG * msg) { return msg->message == WM_KEYDOWN && msg->wParam == VK_F1; } HWND m_wnd = NULL; }; class idle_handler_impl_base : public idle_handler { public: idle_handler_impl_base() {message_loop::get()->add_idle_handler(this);} ~idle_handler_impl_base() { message_loop::get()->remove_idle_handler(this);} bool on_idle() {return true;} PFC_CLASS_NOT_COPYABLE_EX(idle_handler_impl_base) }; #endif // _WIN32
