10

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

我在这里阅读了 MSDN 文档,但并不真正理解它。

有人可以为我提供一个简短的例子/解释如何做到这一点吗?

4

5 回答 5

14

当您有CDC对象时,它将HDC在必要时隐式转换为:

CDC dc;
HDC hdc = dc; // HDC hdc = dc.operator HDC();

如果你有指向CDC对象的指针,那么使用函数GetSafeHdc看起来会更清楚:

CDC* pdc = SOME;
HDC hdc = pdc->GetSafeHdc();
于 2009-08-05T16:53:50.220 回答
11

CDC 类已operator HDC()定义允许编译器将 CDC 对象隐式转换为 HDC。因此,如果您有 CDC* 和一个采用 HDC 的函数,那么您只需取消引用指针并将其发送给函数。

于 2009-08-05T16:30:23.107 回答
3

CDC是一个 C++ 类 - 在合理的近似下 - 封装了一个 HDC,它是一个设备上下文的句柄。

您链接到的文档描述了一个转换operator,它是一个 C++ 构造,类可以提供它以允许从类的实例到其他类型的隐式转换。CDC在这种情况下,隐式转换会产生实例封装的底层句柄 (HDC) 。

您可以在CDC任何需要将其转换为HDC.

最简单的:

void f( const CDC& cdc )
{
    HDC hdc = cdc;

    // use hdc here
}
于 2009-08-05T16:32:32.477 回答
2
HDC hDC = dc;
于 2009-08-05T16:28:25.217 回答
2

分配它。

CDC cdc = something.
HDC hdc = cdc;
if (hdc != 0)
{
  //success...
}
于 2009-08-05T16:29:44.027 回答