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

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

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

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


person samoz    schedule 05.08.2009    source источник


Ответы (4)


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

person Naveen    schedule 05.08.2009

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

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

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

CDC* pdc = SOME;
HDC hdc = pdc->GetSafeHdc();
person Kirill V. Lyadvinsky    schedule 05.08.2009

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

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

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

Проще всего:

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

    // use hdc here
}
person CB Bailey    schedule 05.08.2009

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

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