我想创建一个在运行时生成一些位图的类,然后根据请求在目标设备的上下文中绘制它们。
我尝试:
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);
}
myBitmaps.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);
}
}
但是此代码会导致运行时错误。
如何在我的课程中存储多个位图?
答案 0 :(得分:2)
每个GDI对象只能选择一种类型 一次DC。内存DC是唯一的,因为它是唯一的类型 可以使用HBITMAP和 :: SelectObject。与其他GDI对象类型不同,HBITMAP只能是 一次选择一个DC。因此,如果您使用相同的 具有多个内存DC的位图,请确保保存原始HGDIOBJ 当您将位图选择到DC中时,将其从内存DC中推出。 否则,您尝试将位图选择到另一个内存DC中 将失败。
有关更多详细信息,请参阅下面的链接。
该链接列出了在链接中使用CompatibleDC
时应注意的许多事项。请仔细阅读。