gpt4 book ai didi

c++ - 使用 Sprite C++ MFC

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:13:03 24 4
gpt4 key购买 nike

我需要使用 MFC 显示来自 sprite 的图像。在谷歌上搜索让我找到了这个 link这让我想到了这段代码:

//This code is in the OnPaint function

//img is a CImage, declared as a class member
img.Load(_T("icon-sprite.png"));
HDC imgDc = img.GetDC();

int height = 24;
int width = 24;

//Sprite Icon is a CStatic
CDC* spriteDc = spriteIcon.GetDC();
HDC spriteHdc = spriteDc->GetSafeHdc();

CClientDC pDC(this);
HDC hdcWindow = pDC->GetSafeHdc();

//img.StretchBlt(imgDc, 0, 0, 600, 203, SRCCOPY);
//img.BitBlt(imgDc, width, height, 600, 203, 0, 0, SRCAND);
//img.BitBlt(imgDc, width, height, 640, 480, 0, 0, SRCPAINT);

StretchBlt(imgDc, 0, 0, 600, 203,
imgDc, 0, 0, 200, 203, SRCCOPY);

BitBlt(imgDc, width, height, 600, 203,
imgDc, 0, 0, SRCAND);

BitBlt(imgDc, width, height, 640, 480,
imgDc, 0, 0, SRCPAINT);

spriteIcon.SetBitmap((HBITMAP)img);

使用这段代码spriteIcon 只显示 Sprite 图像大小的矩形。我做错了什么?

最佳答案

很可能 CImage 是本地的并且超出范围,因此图像(和 HBITMAP)无效。您有两个选择:

  • 声明 CImage,即使在此函数返回后它仍然存在。
  • 使用 CImage::Detach 返回一个 HBITMAP 并通过句柄放弃其所有权(即不会在析构函数中删除)。

请确保给定图像存在并正确加载。

此外,您不需要new CClientDC,您可以将它放在堆栈上。

关于c++ - 使用 Sprite C++ MFC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37857370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com