如何在一个类中存储多个位图
How to store multiple bitmaps in a class?
我想创建一个类,该类在运行时生成一些位图,然后根据请求在目标设备的上下文中绘制它们。
我试试这个:
myBitmaps.h
#include <windows.h>
class myBitmaps
{
public:
void myBitmaps(HDC hDC);
const int size = 16;
HDC firstDC;
HBITMAP firstBuff;
HDC secondDC;
HBITMAP secondBuff;
void drawBitmap(HDC hDC, int xPos, int yPos, bool first);
}
我的位图.cpp
#include "myBitmaps.h"
void myBitmaps(HDC hDC)
{
firstDC = CreateCompatibleDC(hDC);
firstBuff = CreateCompatibleBitmap(hDC, size, size);
SelectObject(firstDC, firstBuff);
...draw some lines...
secondDC = CreateCompatibleDC(hDC);
secondBuff = CreateCompatibleBitmap(hDC, size, size);
SelectObject(secondDC, secondBuff);
...draw some lines...
}
void drawBitmap(HDC hDC, int xPos, int yPos, bool first)
{
if(first) {
BitBlt(hDC, xPos, yPos, size, size, firstDC , 0, 0, SRCCOPY);
}
else {
BitBlt(hDC, xPos, yPos, size, size, secondDC , 0, 0, SRCCOPY);
}
}
但此代码会导致运行时错误。
如何在类中存储多个位图?
每个 GDI 对象只能选择一种类型到任何类型 一次的 DC。内存 DC 是唯一的,因为它是唯一的类型 的 DC,可以使用 HBITMAP 并调用 ::选择对象。与其他 GDI 对象类型不同,HBITMAP 只能是 一次选择一个 DC。因此,如果您使用相同的 具有多个内存 DC 的位图,请务必保存原始 HGDIOBJ 当您选择位图进入 DC 时,从内存 DC 推出。 否则,您尝试将位图选择到第二个内存 DC 中 将失败。
有关更多详细信息,请参阅以下链接。
Win32 内存 DC 指南
该链接列出了在链接中使用CompatibleDC
时应注意的许多事项。请仔细阅读。
相关文章:
- C / C++ 移位/偏移/向左或向右移动位图?
- 如何在快板的屏幕中显示子位图的绘制?
- CreateDIBSection为同一图像返回不一致的位图位值
- C++ 位图中的 ttc 字体
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 难以从 CImageList 设置菜单项位图
- 如何将位图拉伸到父面板(wxWidgets 自定义)
- 如何使用 freetype2 访问单色位图中的像素状态
- 将位图 (bmp) 转换为具有透明度的 png (Windows c++)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 位图到垫子/2D 数组
- Gdiplus位图没有Alpha通道
- 如何从路径字符串加载Gdiplus::位图
- 在C++中使用Gdiplus创建透明位图
- 用C++压缩内存中的位图
- C++gdi::内存中的位图到PNG图像
- LoadImage 函数不适用于 ImageMagick 创建的位图图像
- (位图)LoadImage() 返回 NULL,GetLastError() 返回 0
- 将Qt qml文件转换为位图图像
- 使用位集进行位图存储的优势是什么