70,020
社区成员




#define SEND_EVENT(EVT) SEND_##EVT(EVT)
#define EVENT_GET_ID(EVT) template<typename T> static WORD GetEventId() { return T::Id##EVT; }
#define EVENT_SENDER_BEGIN(EVT) if (m_evtFlag.Size() > Id##EVT && m_evtFlag[Id##EVT]) {
#define EVENT_SENDER_END(EVT, VALUE) \
for (WORD i = 0; i < m_evtObj.Size(); ++i) \
{ \
if (m_evtObj[i].id == Id##EVT) \
{ \
(*static_cast<Event<EVT>*>(m_evtObj[i].obj))(VALUE); \
if (i > Id##EVT) \
{ \
m_evtObj.Swap(i, Id##EVT); \
m_evtObj.Resize(m_evtObj.Size()); \
} \
break; \
} \
} \
}
// WM_CREATE
#define SEND_EvtCreate(EVT) \
case WM_CREATE: \
EVENT_SENDER_BEGIN(EVT) \
EVT evt(m_wnd, this, reinterpret_cast<LPCREATESTRUCT>(lpa), res, user, false); \
EVENT_SENDER_END(EVT, evt); \
break
struct EvtCreate
{
EvtCreate(HWND w, Widget* o, LPCREATESTRUCT c, LRESULT& r, bool& u, bool s)
: wnd(w), owner(o), createStruct(c), res(r), user(u), stop(s) {}
HWND wnd;
Widget* owner;
LPCREATESTRUCT createStruct;
LRESULT& res;
bool& user;
bool stop;
EVENT_GET_ID(EvtCreate);
};
#define IMPLEMENT_EVENT(EVT) Event<EVT>& qp##EVT() { return RegisterEvent<EVT>(); }