0

CBitmapButton をサブクラス化して、オーバーライドされた関数 DrawItem で独自のボタンを作成しました。これがそのコードで、動作します:

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);
4

1 に答える 1

0

まあ、多分あなたはそれらを変換しようとすべきではありません. それらを単にクローリングしたい場合は、アルファブレンディングなどをサポートする CImageList::DrawIndirect などの画像リスト描画関数のいずれかを使用してみてください。それはあなたが必要とする唯一のものかもしれません。

于 2012-02-16T16:39:21.463 に答える