⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 event.h

📁 MONA是为数不多的C++语言编写的一个很小的操作系统
💻 H
字号:
// This file is in the public domain.// There are no restrictions on any sort of usage of this file.#ifndef __SYSTEM_EVENT_H__#define __SYSTEM_EVENT_H__#include <gui/System/Object.h>#include <gui/System/Pointer.h>#include <gui/System/Collections/ArrayList.h>#define DECLARE_DELEGATE(name, argtype) \	class I##name : public System::Object { public: virtual void Invoke(_P<System::Object>, argtype) = 0; }; \	template <class T> class name : public I##name { \	private: \		_P<T> ptr; void(T::*func)(_P<System::Object>, argtype); \	public: \		name(_P<T> p, void(T::*f)(_P<System::Object>, argtype)) : ptr(p), func(f) {} \		virtual ~name() {} \		virtual void Invoke(_P<System::Object> sender, argtype arg) { ((ptr.get())->*func)(sender, arg); } \	}; \	class name##_S : public I##name { \	private: \		void(*func)(_P<System::Object>, argtype); \	public: \		name##_S(void(*f)(_P<System::Object>, argtype)) : func(f) {} \		virtual ~name##_S() {} \		virtual void Invoke(_P<System::Object> sender, argtype arg) { (*func)(sender, arg); } \	};#define DECLARE_EVENT(handler, name, argtype) \	private: \		_P<System::Collections::ArrayList<_P<handler> > > name; \	public: \		void add_##name(_P<handler> delg) { \			if (this->name == 0 /*NULL*/) this->name = new System::Collections::ArrayList<_P<handler> >; \			this->name->Add(delg); } \		void remove_##name(_P<handler> delg) { \			if (this->name == 0 /*NULL*/) return; \			this->name->Remove(delg); \			if (this->name->get_Count() == 0) this->name.Unset(); } \	protected: \		void raise_##name(_P<System::Object> sender, argtype e) { \			if (this->name == 0 /*NULL*/) return; \			FOREACH_AL(_P<handler>, h, this->name) h->Invoke(sender, e); } END_FOREACH_ALnamespace System{	class EventArgs : public Object	{	public:		virtual String get_TypeName() { return "System.EventArgs"; }		EventArgs() {};		virtual ~EventArgs() {};				inline static _P<EventArgs> get_Empty() { return new EventArgs(); }	};	DECLARE_DELEGATE(EventHandler, _P<EventArgs>)}#endif  // __SYSTEM_EVENT_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -