如何从CDC对象获取HDC对象?

时间:2009-08-05 16:24:41

标签: c++ windows mfc cdc

我有一个CDC类型的对象dc,我想得到一个HDC对象。

我阅读了MSDN文档here,但并不理解它。

有人可以向我提供有关如何执行此操作的简短示例/说明吗?

5 个答案:

答案 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...
}