C++ 将图标转换为位图--副作用
如何使这段代码严格执行从Windows图标到CBitmap的转换 代码错误地在屏幕上显示新位图:( 这段代码是从网络上的“某人”那里获得的。虽然它实现了转换图标的目标,但它也在屏幕上显示图标(左上角),这是它不应该做的。 D'oh!C++ 将图标转换为位图--副作用,c++,windows,mfc,gdi,C++,Windows,Mfc,Gdi,如何使这段代码严格执行从Windows图标到CBitmap的转换 代码错误地在屏幕上显示新位图:( 这段代码是从网络上的“某人”那里获得的。虽然它实现了转换图标的目标,但它也在屏幕上显示图标(左上角),这是它不应该做的。 D'oh! void CUIHelper::ConvertIconToBitmap2(CBitmap& bmpObj, HICON hIcon) { CClientDC clientDC(NULL); CDC memDC; memDC.Crea
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);