答案 0 :(得分:14)
当您拥有CDC
个对象时,必要时会隐式转换为HDC
:
CDC dc;
HDC hdc = dc; // HDC hdc = dc.operator HDC();
如果你有指向CDC
对象的指针,那么使用函数GetSafeHdc
会更清晰:
CDC* pdc = SOME;
HDC hdc = pdc->GetSafeHdc();
答案 1 :(得分:10)
CDC类定义了operator HDC()
,允许编译器隐式地将CDC对象转换为HDC。因此,如果您有CDC *和一个接受HDC的函数,那么您只需取消引用指针并将其发送到函数。
答案 2 :(得分:3)
CDC
是一个C ++类 - 它以合理的近似值 - 封装了一个HDC,它是设备上下文的句柄。
您链接到的文档描述了转换operator
,它是一个C ++构造,类可以提供这些构造以允许从类的实例隐式转换为其他类型。在这种情况下,隐式转换会导致CDC
实例封装的底层句柄(HDC)。
您可以使用CDC
实例在需要转换为HDC
的任何位置执行转换。
最简单:
void f( const CDC& cdc )
{
HDC hdc = cdc;
// use hdc here
}
答案 3 :(得分:2)
HDC hDC = dc;
答案 4 :(得分:2)
只需指定它。
CDC cdc = something.
HDC hdc = cdc;
if (hdc != 0)
{
//success...
}