Вопрос

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

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

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

Это было полезно?

Решение

В классе

CDC определен оператор 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, который является дескриптором контекста устройства.

Документация, на которую вы ссылаетесь, описывает оператор преобразования , представляющий собой конструкцию 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...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top