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

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

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

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

5 ответов


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


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

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

если у вас есть указатель на CDC объект затем с помощью функции GetSafeHdc будет выглядеть более ясно:

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

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

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

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

наиболее просто:

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

    // use hdc here
}

HDC hDC = dc;

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

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