Это не то. Мне надо из bitmap создать icon с прозрачным фоном.
Код вот такой там (вместе с остатками попыток сделать фон прозрачным):
if (hIcon == NULL)
{
CDC dcMem;
CDC dcMemMask;
CDC dcMemMaskAnd;
CDC* pDC = CWnd::GetDesktopWindow()->GetDC();
if (dcMem.CreateCompatibleDC(pDC)
&& dcMemMask.CreateCompatibleDC(pDC)
&& dcMemMaskAnd.CreateCompatibleDC(pDC)
)
{
CSize hmSize = pic->GetSize();
CBitmap bmMem;
CBitmap bmMemMask;
CBitmap bmMemMaskAnd;
if (bmMem.CreateCompatibleBitmap(pDC, hmSize.cx, hmSize.cy))
{
bmMemMask.CreateBitmap(hmSize.cx, hmSize.cy, 1, 1, NULL);
bmMemMaskAnd.CreateCompatibleBitmap(pDC, hmSize.cx, hmSize.cy);
CBitmap* pOldBM = dcMem.SelectObject(&bmMem);
CBitmap* pOldBMmask = dcMemMask.SelectObject(&bmMemMask);
CBitmap* pOldBMmaskAnd = dcMemMaskAnd.SelectObject(&bmMemMaskAnd);
RECT rect1;
RECT rect2;
rect1.top = rect1.left = 0;
rect1.right = hmSize.cx;
rect1.bottom = hmSize.cy;
pic->Render(dcMem, rect1, 0, &rect2);
// здесь надо из bmp сделать иконку с прозрачным фоном
/*
COLORREF old_color = dcMem.SetBkColor(RGB(0x00,0x80,0x80));
dcMemMask.BitBlt(0, 0, hmSize.cx, hmSize.cy, &dcMem, 0, 0, SRCCOPY);
dcMemMaskAnd.BitBlt(0, 0, hmSize.cx, hmSize.cy, &dcMemMask, 0, 0, SRCCOPY);
dcMem.BitBlt(0, 0, hmSize.cx, hmSize.cy, &dcMemMaskAnd, 0, 0, SRCPAINT);
dcMem.SetBkColor(old_color);
*/
dcMemMaskAnd.FillSolidRect(0,0,hmSize.cx, hmSize.cy, RGB(0x00,0x00,0x00));
ICONINFO piconinfo;
piconinfo.fIcon = TRUE;
piconinfo.xHotspot = 0;
piconinfo.yHotspot = 0;
piconinfo.hbmColor = (HBITMAP)bmMem.Detach();
piconinfo.hbmMask = (HBITMAP)bmMemMaskAnd.Detach();
hIcon = ::CreateIconIndirect(&piconinfo);
dcMem.SelectObject(pOldBM);
dcMemMask.SelectObject(pOldBMmask);
dcMemMaskAnd.SelectObject(pOldBMmaskAnd);
}
}
CWnd::GetDesktopWindow()->ReleaseDC(pDC);
}