Как я могу получить объект HDC с объекта CDC?

У меня есть объект, dc, типа CDC, и я хотел бы получить объект HDC.

Я прочитал документацию MSDN здесь, но на самом деле не понимаю.

Может ли кто-нибудь предоставить мне краткий пример/объяснение того, как это сделать?

Ответ 1

Класс CDC имеет operator HDC(), который позволяет компилятору неявно преобразовывать объект CDC в HDC. Следовательно, если у вас есть CDC * и функция, которая принимает HDC, вы просто разыскиваете указатель и отправляете его функции.

Ответ 2

Если у вас есть объект CDC, он будет неявно преобразован в HDC при необходимости:

CDC dc;
HDC hdc = dc; // HDC hdc = dc.operator HDC();

Если у вас есть указатель на объект CDC, то функция GetSafeHdc будет выглядеть более четко:

CDC* pdc = SOME;
HDC hdc = pdc->GetSafeHdc();

Ответ 3

CDC - это класс С++, который - в разумной аппроксимации - инкапсулирует HDC, который является дескриптором контекста устройства.

В документе, который вы ссылаетесь, описывается преобразование operator, которое является конструкцией С++, которую классы могут предоставлять, чтобы позволить неявное преобразование из экземпляра класса в какой-либо другой тип. В этом случае неявное преобразование приводит к базовому дескриптору (HDC), который инкапсулирует экземпляр CDC.

Вы можете выполнить преобразование с помощью экземпляра CDC где угодно, его нужно преобразовать в HDC.

Проще всего:

void f( const CDC& cdc )
{
    HDC hdc = cdc;

    // use hdc here
}

Ответ 4

HDC hDC = dc;

Ответ 5

Просто назначьте его.

CDC cdc = something.
HDC hdc = cdc;
if (hdc != 0)
{
  //success...
}