//------------------------------------------------------------------------------------- HBITMAP CMainFrame::CVistaMenuIcon::QueryIcon (UINT nID) { std::map<UINT, FCObjImage*>::iterator i = m_tab.find(nID) ; if (i != m_tab.end()) return *i->second ; FCObjImage * pImg = new FCObjImage ; pImg->LoadResource (nID, L"PNG", IMG_PNG) ; if (pImg->IsValidImage() && (pImg->ColorBits() == 32)) { pImg->ApplyEffect (FCEffectPremultipleAlpha()) ; } m_tab[nID] = pImg ; return *pImg ; }
//------------------------------------------------------------------------------------- void CMainFrame::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDIS) { if (lpDIS && (lpDIS->CtlType == ODT_MENU)) { FCObjImage img ; img.LoadResource (lpDIS->itemID, L"PNG", IMG_PNG) ; if (img.IsValidImage()) { if (lpDIS->itemState & ODS_DISABLED) { img.ApplyEffect (FCEffectGrayscale()) ; } std::auto_ptr<Gdiplus::Bitmap> gb (img.CreateBitmap()) ; CRect rc = FCObjGraph::CalcFitWindowSize (CSize(img.Width(),img.Height()), lpDIS->rcItem) ; Gdiplus::Graphics(lpDIS->hDC).DrawImage (gb.get(), rc.left, rc.top, rc.Width(), rc.Height()) ; } return ; } CMDIFrameWnd::OnDrawItem (nIDCtl, lpDIS) ; }