将图标转换为位图——副作用

Converting ICON to BITMAP -- side-effect

本文关键字:副作用 位图 图标 转换      更新时间:2023-10-16

如何使此代码严格执行从Windows图标到CBitmap的转换?

代码不正确地在屏幕上显示新的位图。(

这个代码是从网上的"某人"那里获得的。虽然它实现了转换图标的目标,但是也在屏幕上(左上角)显示了图标,这是它不应该做的。

分析!

void CUIHelper::ConvertIconToBitmap2(CBitmap& bmpObj, HICON hIcon) 
{
    CClientDC clientDC(NULL);
    CDC memDC;
    memDC.CreateCompatibleDC(&clientDC);
    ASSERT(hIcon);
    ICONINFO info;
    VERIFY(GetIconInfo(hIcon, &info));
    BITMAP bmp;
    GetObject(info.hbmColor, sizeof(bmp), &bmp);
    HBITMAP hBitmap = (HBITMAP)CopyImage(info.hbmColor, IMAGE_BITMAP, 0, 0, 0);
    ASSERT(hBitmap);
    ASSERT(memDC.GetSafeHdc());
    HBITMAP hOldBmp = (HBITMAP)memDC.SelectObject(hBitmap);
    clientDC.BitBlt(0, 0, bmp.bmWidth, bmp.bmHeight, &memDC, 0, 0, SRCCOPY);
    memDC.SelectObject(hOldBmp);
    VERIFY( bmpObj.Attach(hBitmap) );
    DeleteObject(info.hbmColor);
    DeleteObject(info.hbmMask);
}

一提到GDI我就很笨。

clientDC.BitBlt(0, 0, bmp.bmWidth, bmp.bmHeight, &memDC, 0, 0, SRCCOPY);

应该

memDC.BitBlt(0, 0, bmp.bmWidth, bmp.bmHeight, &memDC, 0, 0, SRCCOPY);