namespace KERNEL
{
class MESSAGE_OBJECT_EXPORT CMessageListenerBase
{
public:
CMessageListenerBase();
virtual ~CMessageListenerBase();
virtual long OnNotifyMessage(const char* sMsg, WPARAM wParam, LPARAM lParam) ;
virtual long OnNotifyMessage(long nMsgID, WPARAM wParam, LPARAM lParam) ;
protected:
DWORD m_Type;//侦听类型
};
//消息传送对象
class MESSAGE_OBJECT_EXPORT CMessageOper
{
public:
CMessageOper(){};
~CMessageOper(){};
#define KERN_MSG_BROADCAST ((CMessageListenerBase*)0xFFFF) //广播消息
#define KERN_MSG_INVALID ((CMessageListenerBase*)0x0000)
//无效消息
//同步发送消息,不管结果如何,继续执行后续操作
static long PostMessage(CMessageListenerBase *pMsgListener,long nMsg, WPARAM wParam, LPARAM lParam);
static long PostMessage(CMessageListenerBase *pMsgListener,const char* sMessageName, WPARAM wParam, LPARAM lParam);
//异步发送消息,如果发送失败,则中端操作
static long SendMessage(CMessageListenerBase *pMsgListener,long nMsg, WPARAM wParam, LPARAM lParam);
static long SendMessage(CMessageListenerBase *pMsgListener,const char* sMessageName, WPARAM wParam, LPARAM lParam);
protected:
private:
};
}
在postmessage中,应该会根据KERN_MSG_BROADCAST或者KERN_MSG_INVALID 来判断是哪种形式,这样内部就会根据这个对应不同的操作:
KERN_MSG_BROADCAST ----广播所有的插件
如果PostMessage(CMessageListenerBase *pMsgListener----的派生类),这样就会根据基类指针寻找派生类,这样就可以实现一对一的发送。
KERN_MSG_INVALID----无效操作
同时注意:SendMessage和PostMessage的区别