をここに... 16個のピクセル高、示唆されているように、イメージリストを作成し、ビットマップにあなたのアイコンを作る、nは長い16 *により、ここでn =アイコンの数...
背景色を255、0、255に設定します。
はその後、それをロードして、私はここに行ったようにイメージリストに追加します。もちろん
m_ImageList.Create(16, 16, ILC_COLOR16 | ILC_MASK, 7, 1);
CBitmap bm;
bm.LoadBitmap(IDB_SUPERTREEICONS);
m_ImageList.Add(&bm, RGB(255, 0, 255));
GetTreeCtrl().SetImageList(&m_ImageList, TVSIL_NORMAL);
、これはMFCで書かれていたが、あなたが知っているように、それは、Win32への単なるラッパーです。..
外では、カスタム描画コントロールに移動する必要があります。カスタム描画コントロールに移動する必要があります。このコントロールでは、アイコンの背景にアイコンが描画されます。私が知っている魔法の "透明な"色は、これらのコントロールのいずれにも本当にありません。
カスタムドローの場合は、次のようなコードを使用する必要があります。
#define TRANSPARENT_COLOR (255,0,255)
UINT iBitmap = IDB_ICON_UP
CDC *dc = GetDC();
int x = 0, y = 0;
CDC *pDisplayMemDC = new CDC;
CDC *pMaskDC = new CDC;
CDC *pMemDC = new CDC;
CBitmap *pBitmap = new CBitmap;
CBitmap *pMaskBitmap = new CBitmap;
CBitmap *pMemBitmap = new CBitmap;
int cxLogo, cyLogo;
BITMAP bm;
pBitmap->LoadBitmap(iBitmap);
pDisplayMemDC->CreateCompatibleDC(dc);
CBitmap *pOldBitmap = (CBitmap *)pDisplayMemDC->SelectObject(pBitmap);
pBitmap->GetObject(sizeof(bm), &bm);
cxLogo = bm.bmWidth;
cyLogo = bm.bmHeight;
pMaskBitmap->CreateBitmap(cxLogo, cyLogo, 1, 1, NULL);
pMaskDC->CreateCompatibleDC(dc);
CBitmap *pOldMask = (CBitmap *)pMaskDC->SelectObject(pMaskBitmap);
COLORREF oldBkColor = pDisplayMemDC->SetBkColor(TRANSPARENT_COLOR);
pMaskDC->BitBlt(0, 0, cxLogo, cyLogo, pDisplayMemDC, 0, 0, SRCCOPY);
pMemBitmap->CreateCompatibleBitmap(dc, cxLogo, cyLogo);
pMemDC->CreateCompatibleDC(dc);
CBitmap *pOldMem = (CBitmap *)pMemDC->SelectObject(pMemBitmap);
pMemDC->BitBlt(0, 0, cxLogo, cyLogo, dc, x, y, SRCCOPY);
pMemDC->BitBlt(0, 0, cxLogo, cyLogo, pDisplayMemDC, 0, 0, SRCINVERT);
pMemDC->BitBlt(0, 0, cxLogo, cyLogo, pMaskDC, 0, 0, SRCAND);
pMemDC->BitBlt(0, 0, cxLogo, cyLogo, pDisplayMemDC, 0, 0, SRCINVERT);
dc->BitBlt(x, y, cxLogo, cyLogo, pMemDC, 0, 0, SRCCOPY);
delete pMemDC->SelectObject(pOldMem);
delete pMemDC;
delete pMaskDC->SelectObject(pOldMask);
delete pMaskDC;
delete pDisplayMemDC->SelectObject(pOldBitmap);
delete pDisplayMemDC;
このコードは、アイコンを描画することを決定し、背景のスナップショットを取り、マスクを作成し、アイコンをクリックし、それを背景に描画して、完全に透明な背景を与えます。
多少助けてくれることを望みます。そうでない場合は、何をしようとしているのか、何を見ているのか、または見ていないものをさらに詳しく説明してください...
あなたは、私は人々があなたのコードをテストしているいくつかのコメントを参照してください..私はこの分野で多くの仕事をして以来、それを見てみたいです... – LarryF
http: //stackoverflow.com/questions/6893351/transparent-images-in-imagelists-for-listviews/スレッド。 Olexiy –