Как мога да получа 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