//------------------------------------------------------------------------------------- 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) ; }
//================================================================================= // 画线基类/base class of drawline (32 bit) void CCmdImgDrawlineBase::Implement (FCObjImage & img, FCObjProgress * Percent) { if (!img.IsValidImage() || (img.ColorBits() != 32)) return ; m_nAlpha = FClamp0255 (m_nAlpha) ; // 制作大小一样的alpha位图,注意:位图数据初始化为0(也即黑色) FCObjImage imgAlpha (img.Width(), img.Height(), 8) ; // draw lines this->DrawAlphaMask (imgAlpha) ; //imgAlpha.Save("D:\\a.bmp"); // 制作纯色位图 FCObjImage imgCover (img.Width(), img.Height(), 32) ; FCPixelFillColor cmdFillCr(m_cr) ; imgCover.SinglePixelProcessProc (cmdFillCr) ; imgCover.AppendAlphaChannel (imgAlpha) ; //imgCover.Save("D:\\te.bmp"); img.CombineAlphaImg (imgCover) ; //img.Save("D:\\te.bmp"); }