У меня есть объект dc типа CDC, и я хочу получить объект HDC.
Я прочитал документацию MSDN здесь, но не не очень понимаю.
Может ли кто-нибудь предоставить мне краткий пример/объяснение того, как это сделать?
У меня есть объект dc типа CDC, и я хочу получить объект HDC.
Я прочитал документацию MSDN здесь, но не не очень понимаю.
Может ли кто-нибудь предоставить мне краткий пример/объяснение того, как это сделать?
В классе 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
}
Просто назначьте его.
CDC cdc = something.
HDC hdc = cdc;
if (hdc != 0)
{
//success...
}