00001
#include "StdAfx.h"
00002
#include "GUI.h"
00003
00004 CGUIEventHandler::CGUIEventHandler(UINT MaxMessages)
00005 {
00006 m_uiMessageCount = MaxMessages;
00007 m_pMessages =
new tGUIMessage[MaxMessages];
00008 m_uiLastUnusedMessage = 0;
00009 }
00010
00011 CGUIEventHandler::~CGUIEventHandler()
00012 {
00013
if(m_pMessages !=NULL)
00014 SAFEDEL_ARRAY(m_pMessages)
00015 }
00016
00017 int CGUIEventHandler::PostMessage(
CGUIElement *pSender,
CGUIElement *pReceiver, eGUIMessage eMessage, DWORD lParam, DWORD wParam, UINT uiTimeoutMs)
00018 {
00019
tGUIMessage *NewMessage = NULL;
00020 UINT NewUnusedMessage = 0;
00021
00022
00023
for (UINT i=0; i<m_uiMessageCount; i++)
00024 {
00025
if(m_pMessages[i].bUsed ==
false && NewMessage != NULL)
00026 {
00027 m_uiLastUnusedMessage = i;
00028
break;
00029 }
00030
00031
if(m_pMessages[i].bUsed ==
false && NewMessage == NULL)
00032 NewMessage = (
tGUIMessage *)&m_pMessages[i];
00033 }
00034
00035
if(NewMessage !=NULL)
00036 {
00037 NewMessage->
pReceiver = pReceiver;
00038 NewMessage->
pSender = pSender;
00039 NewMessage->uiMessage = eMessage;
00040 NewMessage->dwTimeout = uiTimeoutMs;
00041 NewMessage->dwCreateTime = m_Timer.GetAbsoluteTime();
00042 NewMessage->dwParam[0] = lParam;
00043 NewMessage->dwParam[1] = wParam;
00044 NewMessage->bUsed =
true;
00045
00046
return 1;
00047 }
00048
00049
return 0;
00050 }
00051
00052 void CGUIEventHandler::Dispatch(
bool bOnce)
00053 {
00054
for (
int i=0; i<m_uiMessageCount; i++)
00055 {
00056
tGUIMessage *pMessage = (
tGUIMessage *)&m_pMessages[i];
00057
if(m_pMessages[i].bUsed)
00058 {
00059
double CurrentTime = m_Timer.GetAbsoluteTime();
00060
if(CurrentTime - m_pMessages[i].dwCreateTime)
00061 {
00062
if(pMessage->
pReceiver !=NULL)
00063 {
00064 pMessage->
pReceiver->
ProcessMessage(*pMessage);
00065
if(bOnce)
00066 pMessage->bUsed =
false;
00067 }
00068 }
00069 }
00070 }
00071 }
00072
00073 tGUIMessage *
CGUIEventHandler::GetMessage(UINT uiIndex)
00074 {
00075
if(uiIndex >=0 && uiIndex < m_uiMessageCount)
00076
return (
tGUIMessage *)&m_pMessages[uiIndex];
00077
00078
return NULL;
00079 }
00080
00081 void CGUIEventHandler::Flush()
00082 {
00083
for (
int i=0; i<m_uiMessageCount; i++)
00084 {
00085
tGUIMessage *pMessage = (
tGUIMessage *)&m_pMessages[i];
00086 pMessage->bUsed =
false;
00087 pMessage->uiMessage = 0;
00088 pMessage->
pSender = pMessage->
pReceiver = NULL;
00089 }
00090 }