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

时间:2019-06-11 10:27:27

标签: c++ winapi bitmap

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

我尝试:

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

但是此代码会导致运行时错误。

如何在我的课程中存储多个位图?

1 个答案:

答案 0 :(得分:2)

  

每个GDI对象只能选择一种类型   一次DC。内存DC是唯一的,因为它是唯一的类型   可以使用HBITMAP和   :: SelectObject。与其他GDI对象类型不同,HBITMAP只能是   一次选择一个DC。因此,如果您使用相同的   具有多个内存DC的位图,请确保保存原始HGDIOBJ   当您将位图选择到DC中时,将其从内存DC中推出。   否则,您尝试将位图选择到另一个内存DC中   将失败。

有关更多详细信息,请参阅下面的链接。

Guide to Win32 Memory DC

该链接列出了在链接中使用CompatibleDC时应注意的许多事项。请仔细阅读。