如何在一个类中存储多个位图

How to store multiple bitmaps in a class?

本文关键字:存储 位图 一个      更新时间:2023-10-16

我想创建一个类,该类在运行时生成一些位图,然后根据请求在目标设备的上下文中绘制它们。

我试试这个:

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时应注意的许多事项。请仔细阅读。