#include "MessageManager.h"
MessageManager::MessageManager()
{
}
MessageManager::~MessageManager()
{
ClearMessages();
}
void MessageManager::AddMessage(UINT message, HWND window)
{
WindowSet *winSet;
MsgMap::iterator iter = msgs.find(message);
if (iter == msgs.end())
{
winSet = new WindowSet();
msgs[message] = winSet;
}
else
winSet = iter->second;
winSet->insert(window);
}
void MessageManager::RemoveMessage(UINT message, HWND window)
{
MsgMap::iterator iter = msgs.find(message);
if (iter == msgs.end()) return;
iter->second->erase(window);
if (iter->second->size() == 0)
{
delete iter->second;
msgs.erase(iter);
}
}
void MessageManager::ClearMessages()
{
MsgMap::iterator iter = msgs.begin();
while (iter != msgs.end())
{
if (iter->second)
delete iter->second;
iter++;
}
msgs.clear();
}
bool MessageManager::SendMessage(UINT message, WPARAM wParam, LPARAM lParam, LRESULT *result)
{
WindowSet *winSet;
MsgMap::iterator iter1 = msgs.find(message);
if (result) *result = 0;
if (iter1 == msgs.end()) return false;
winSet = iter1->second;
WindowSet::iterator iter2 = winSet->begin();
if (iter2 != winSet->end())
{
if (result)
{
*result = ::SendMessage((HWND)*iter2, message, wParam, lParam);
iter2++;
}
}
while (iter2 != winSet->end())
{
::SendMessage((HWND)*iter2, message, wParam, lParam);
iter2++;
}
return true;
}
void MessageManager::PostMessage(UINT message, WPARAM wParam, LPARAM lParam)
{
WindowSet *winSet;
MsgMap::iterator iter1;
iter1 = msgs.find(message);
if (iter1 == msgs.end()) return;
winSet = iter1->second;
WindowSet::iterator iter2 = winSet->begin();
while (iter2 != winSet->end())
{
::PostMessage((HWND)*iter2, message, wParam, lParam);
iter2++;
}
}
bool MessageManager::HandlerExists(UINT message)
{
if (msgs.find(message) != msgs.end())
return true;
return false;
}
syntax highlighting by