【问题标题】:How can I get an HDC object from a CDC object?如何从 CDC 对象中获取 HDC 对象?
【发布时间】:2010-11-17 02:02:33
【问题描述】:

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

我阅读了 MSDN 文档here,但不是很明白。

谁能给我一个简短的例子/解释如何做到这一点?

【问题讨论】:

    标签: c++ windows mfc cdc


    【解决方案1】:

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

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

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

    CDC* pdc = SOME;
    HDC hdc = pdc->GetSafeHdc();
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        您可以在任何需要转换为HDC 的地方使用CDC 实例来执行转换。

        最简单的:

        void f( const CDC& cdc )
        {
            HDC hdc = cdc;
        
            // use hdc here
        }
        

        【讨论】:

          【解决方案4】:
          HDC hDC = dc;
          

          【讨论】:

            【解决方案5】:

            只需分配它。

            CDC cdc = something.
            HDC hdc = cdc;
            if (hdc != 0)
            {
              //success...
            }
            

            【讨论】:

              猜你喜欢
              • 2010-11-23
              • 1970-01-01
              • 2022-12-15
              • 1970-01-01
              • 1970-01-01
              • 2013-08-11
              • 2021-01-25
              • 1970-01-01
              • 2021-04-08
              相关资源
              最近更新 更多