自己简单构建消息管理机制

介绍:在一处对消息进行统一的管理,界面通过注册订阅消息,将消息注册到管理的区域(这个管理区域可以用map<int, set<CWnd*> >来保存注册的窗口句柄,前面的int标示消息类型),那么当有此类型的消息到来时,可以通过发送接口发给所有订阅者,界面也可以取消订阅消息,在界面模块很多的情况下,可以有效的管理消息。

1. //MessageMgr.h 中定义:

 #include <map>
 #include <set>

 管理消息及窗口句柄的区域:
 std::map<int, std:set<CWnd*> > m_msgListen;

 //界面通过此函数注册订阅消息
 int ListenMessage(int nMessageType, CWnd* wnd);
 //界面通过此函数取消注册订阅
 int UnListenMessage(int nMessageType, CWnd* wnd);
 //调用此函数可以对某种消息的所有订阅者发送消息
 int PostMessage(int nMessageType, WPARAM wParam, LPARAM lParam);

2.//MessageMgr.cpp 中实现:
int DataMgr::ListenMessage(int nMessageType, CWnd* wnd)
{
 m_msgListen[nMessageType].insert(wnd);
 return 0;
}

int DataMgr::UnListenMessage(int nMessageType, CWnd* wnd)
{
 std::set<CWnd*>::iterator itr = m_msgListen[nMessageType].find(wnd);
 if (itr != NULL)
 {
  delete *itr;
  m_msgListen[nMessageType].erase(itr);
 }
 return 0;
}

int DataMgr::PostMessage(int nMessageType, WPARAM wParam, LPARAM lParam)
{
 std::set<CWnd*>::iterator itr = m_msgListen[nMessageType].begin();
 for (; itr != m_msgListen[nMessageType].end(); itr++)
 {
  ::PostMessage((*itr)->m_hWnd, nMessageType, wParam, lParam);
 }
 return 0;
}
3.这多半是多线程操作,故要添加线程锁,这里不介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值