2012-02-16 87 views
0

我已經子類CBitmapButton創建我自己的按鈕與重寫函數DrawItem。這裏是它的代碼,它的工作原理:Windows Mobile(MFC)。如何將圖像從CImageList轉換爲CBitmap的alpha通道?

CDC *pDC = &dc; 
CDC memDC; 
memDC.CreateCompatibleDC(pDC); 
CBitmap m_Bmp; 
m_Bmp.LoadBitmap(IDB_ARROW); 
CBitmap *temp = memDC.SelectObject(&m_Bmp); 
BLENDFUNCTION blend; 
blend.BlendOp = AC_SRC_OVER; 
blend.BlendFlags = 0; 
blend.AlphaFormat = AC_SRC_ALPHA; 
blend.SourceConstantAlpha = 255; 
AlphaBlend(pDC->m_hDC, pt.x, pt.y, 85, 85, memDC.m_hDC, 0, 0, 85, 85, blend); 
dc.SelectObject(&temp); 

問題是,所有的圖像已經加載並存儲在CImageList中。我不知道如何轉換它們。

在創建CImageList時可能會出錯: m_LargeImg.Create(365,85,ILC_COLOR32,4,0);

ImageWork::get().addBitmapToList(IDB_MAIN_MENU_ICON1, &m_LargeImg); 
    ImageWork::get().addBitmapToList(IDB_MAIN_MENU_ICON2, &m_LargeImg); 
    ImageWork::get().addBitmapToList(IDB_MAIN_MENU_ICON3, &m_LargeImg); 
    ImageWork::get().addBitmapToList(IDB_MAIN_MENU_ICON4, &m_LargeImg); 

回答

0

那麼,也許你不應該嘗試轉換它們。如果您只是想抓取它們,請嘗試使用支持Alpha混合等的CImageList :: DrawIndirect等圖像列表繪製函數之一。這可能是你唯一需要的。

+0

它不適合我。也許這是因爲Winmobile的MFC被修剪(DrawIndirect有9個參數而不是12個)。那麼你能舉一個具體的例子嗎? – Gargo 2012-02-17 06:50:09

相關問題