QuestMenu::~QuestMenu() { ClearMenu(); }
GossipMenu::~GossipMenu() { ClearMenu(); }
void CPopupMenu::Clear() { if (m_hmenu!=NULL) ClearMenu(GetPopupHandle()); }
bool CChannelMenu::Create(const CChannelList *pChannelList,int CurChannel,UINT Command, HMENU hmenu,HWND hwnd,unsigned int Flags,int MaxRows) { Destroy(); if (pChannelList==NULL) return false; m_ChannelList=*pChannelList; m_CurChannel=CurChannel; m_FirstCommand=Command; m_LastCommand=Command+m_ChannelList.NumChannels()-1; m_Flags=Flags; m_hwnd=hwnd; m_MenuPainter.Initialize(hwnd); m_MenuPainter.GetItemMargins(&m_Margins); if (m_Margins.cxLeftWidth<2) m_Margins.cxLeftWidth=2; if (m_Margins.cxRightWidth<2) m_Margins.cxRightWidth=2; HDC hdc=::GetDC(hwnd); CreateFont(hdc); HFONT hfontOld=DrawUtil::SelectObject(hdc,m_Font); CEpgProgramList &EpgProgramList=GetAppClass().EpgProgramList; const bool fCurServices=(Flags & FLAG_CURSERVICES)!=0; SYSTEMTIME st; if (!fCurServices) GetBaseTime(&st); m_ChannelNameWidth=0; m_EventNameWidth=0; if (hmenu==NULL) { m_hmenu=::CreatePopupMenu(); } else { m_hmenu=hmenu; m_Flags|=FLAG_SHARED; ClearMenu(hmenu); } MENUITEMINFO mii; mii.cbSize=sizeof(MENUITEMINFO); mii.fMask=MIIM_FTYPE | MIIM_STATE | MIIM_ID | MIIM_DATA; int PrevSpace=-1; for (int i=0,j=0;i<m_ChannelList.NumChannels();i++) { const CChannelInfo *pChInfo=m_ChannelList.GetChannelInfo(i); if (!pChInfo->IsEnabled()) continue; TCHAR szText[256]; RECT rc; if (i==CurChannel) DrawUtil::SelectObject(hdc,m_FontCurrent); StdUtil::snprintf(szText,lengthof(szText),TEXT("%d: %s"), pChInfo->GetChannelNo(),pChInfo->GetName()); /* m_MenuPainter.GetItemTextExtent(hdc,0,szText,&rc, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX); */ ::SetRectEmpty(&rc); ::DrawText(hdc,szText,-1,&rc,DT_SINGLELINE | DT_NOPREFIX | DT_CALCRECT); if (rc.right>m_ChannelNameWidth) m_ChannelNameWidth=rc.right; mii.wID=m_FirstCommand+i; mii.fType=MFT_OWNERDRAW; if ((MaxRows>0 && j==MaxRows) || ((Flags&FLAG_SPACEBREAK)!=0 && pChInfo->GetSpace()!=PrevSpace)) { mii.fType|=MFT_MENUBREAK; j=0; } mii.fState=MFS_ENABLED; if (i==CurChannel) mii.fState|=MFS_CHECKED; CChannelMenuItem *pItem=new CChannelMenuItem(pChInfo); mii.dwItemData=reinterpret_cast<ULONG_PTR>(pItem); if ((Flags&FLAG_SHOWEVENTINFO)!=0) { const CEventInfoData *pEventInfo= pItem->GetEventInfo(&EpgProgramList,0,fCurServices?NULL:&st); if (pEventInfo!=NULL) { GetEventText(pEventInfo,szText,lengthof(szText)); /* m_MenuPainter.GetItemTextExtent(hdc,0,szText,&rc, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX); */ ::SetRectEmpty(&rc); ::DrawText(hdc,szText,-1,&rc,DT_SINGLELINE | DT_NOPREFIX | DT_CALCRECT); if (rc.right>m_EventNameWidth) m_EventNameWidth=rc.right; } } ::InsertMenuItem(m_hmenu,i,TRUE,&mii); if (i==CurChannel) DrawUtil::SelectObject(hdc,m_Font); PrevSpace=pChInfo->GetSpace(); j++; } ::SelectObject(hdc,hfontOld); ::ReleaseDC(hwnd,hdc); if ((Flags&FLAG_SHOWTOOLTIP)!=0) { m_Tooltip.Create(hwnd); m_Tooltip.SetMaxWidth(480); m_Tooltip.SetPopDelay(30*1000); m_Tooltip.AddTrackingTip(1,TEXT("")); } if ((Flags & FLAG_SHOWLOGO)!=0) { if (!m_LogoFrameImage.IsCreated()) { m_LogoFrameImage.Load(GetAppClass().GetResourceInstance(), MAKEINTRESOURCE(IDB_LOGOFRAME),LR_CREATEDIBSECTION); } } return true; }
CommandMenu::~CommandMenu() { ClearMenu(); }