我有一个 CDC 类型的对象 dc,我想获得一个 HDC 对象。
我在这里阅读了 MSDN 文档,但并不真正理解它。
有人可以为我提供一个简短的例子/解释如何做到这一点吗?
当您有CDC
对象时,它将HDC
在必要时隐式转换为:
CDC dc;
HDC hdc = dc; // HDC hdc = dc.operator HDC();
如果你有指向CDC
对象的指针,那么使用函数GetSafeHdc
看起来会更清楚:
CDC* pdc = SOME;
HDC hdc = pdc->GetSafeHdc();
CDC 类已operator HDC()
定义允许编译器将 CDC 对象隐式转换为 HDC。因此,如果您有 CDC* 和一个采用 HDC 的函数,那么您只需取消引用指针并将其发送给函数。
CDC
是一个 C++ 类 - 在合理的近似下 - 封装了一个 HDC,它是一个设备上下文的句柄。
您链接到的文档描述了一个转换operator
,它是一个 C++ 构造,类可以提供它以允许从类的实例到其他类型的隐式转换。CDC
在这种情况下,隐式转换会产生实例封装的底层句柄 (HDC) 。
您可以在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...
}