【发布时间】:2010-11-17 02:02:33
【问题描述】:
【问题讨论】:
【问题讨论】:
当您拥有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)。
您可以在任何需要转换为HDC 的地方使用CDC 实例来执行转换。
最简单的:
void f( const CDC& cdc )
{
HDC hdc = cdc;
// use hdc here
}
【讨论】:
HDC hDC = dc;
【讨论】:
只需分配它。
CDC cdc = something.
HDC hdc = cdc;
if (hdc != 0)
{
//success...
}
【讨论】: