Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将图标转换为位图--副作用_C++_Windows_Mfc_Gdi - Fatal编程技术网

C++ 将图标转换为位图--副作用

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

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

代码错误地在屏幕上显示新位图:(

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

D'oh!

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