Как хранить несколько растровых изображений в классе? - PullRequest
0 голосов
/ 11 июня 2019

Я хочу создать класс, который генерирует некоторые растровые изображения во время выполнения, а затем рисует их в контексте целевого устройства по запросу.

Я пытаюсь это сделать:

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 Ответ

2 голосов
/ 11 июня 2019

Может быть только один тип каждого объекта GDI, выбранный для любого типа DC одновременно.DC памяти является уникальным, поскольку это единственный тип DC, который позволяет использовать HBITMAP с вызовом :: SelectObject.В отличие от других типов объектов GDI, HBITMAP может быть выбран только в одном DC одновременно.Поэтому, если вы используете одно и то же растровое изображение с несколькими DC памяти, обязательно сохраните исходный HGDIOBJ, выгруженный из DC памяти, когда вы выбираете свое растровое изображение в DC.В противном случае ваша попытка выбрать растровое изображение во втором DC памяти потерпит неудачу.

Для получения дополнительной информации, пожалуйста, обратитесь к ссылке ниже.

Руководство по Win32 Memory DC

В ссылке перечислено много вещей, на которые следует обратить внимание при использовании CompatibleDC в ссылке.Пожалуйста, прочитайте их внимательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...