bool MMenuItem::OnEvent(MEvent* pEvent, MListener* pListener) { MRECT r = GetClientRect(); switch(pEvent->nMessage){ case MWM_MOUSEMOVE: case MWM_LBUTTONDOWN: case MWM_RBUTTONDOWN: case MWM_LBUTTONDBLCLK: if(r.InPoint(pEvent->Pos)==true){ MPopupMenu* pPopupMenu = (MPopupMenu *)GetParent(); pPopupMenu->Select(this); return true; } break; case MWM_LBUTTONUP: if(r.InPoint(pEvent->Pos)==true){ MPopupMenu* pPopupMenu = (MPopupMenu *)GetParent(); if(GetSubMenu()!=NULL) pPopupMenu->Select(this); else{ if(pListener!=NULL) pListener->OnCommand(this, GetText()); } return true; } break; case MWM_RBUTTONUP: break; } return false; }