关闭

HDC vs CDC

标签: mfcwindowsapi
1330人阅读 评论(0) 收藏 举报
分类:

HDC是一个句柄,CDC是一个MFC定义的类,CDC *是定义一个CDC类的指针,CDC的类成员中应该有一个成员变量m_hDC就是对应的HDC 
 

假设已经有一个CDC
CDC *pdc=GetDc();
HDC hdc=pdc.GetSafeHdc();

HDC是CDC实例的句柄
如果已经知道一个句柄,可以得到这个CDC对象
CDC *pdc=FromHandle( hdc );

 

有时Windows API将会给你一个DC句柄,你可以通过它建立一个CDC类。例如:下拉式列表、组合框和按钮。通过hDC你将接收到绘制消息。下面是将HDC转换成你更熟悉的CDC的程序段。你也可以将该技巧用在其他任何MFC类和Windows句柄的转换中。

void MyODList::DrawItem(LPDRAWITEMSTRUCT lpDrawItem)
{
    CDC myDC;
    myDC.Attach(lpDrawItem->hDC);
    //在此插入其他需要的代码。

    //如果你不将句柄分离,它将被删除,从而导致问题。
    myDC.Detach();
}

另一个方法是调用CDC类的FromHandle方法:
            CDC * pDC = CDC:FromHandle(lpDrawItem->hDC);

目前还不清楚哪种方法更优越―使用FromHandle()的错误也许会更少些,因为它不要求你分离(detach)句柄。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1340135次
    • 积分:20811
    • 等级:
    • 排名:第365名
    • 原创:810篇
    • 转载:12篇
    • 译文:1篇
    • 评论:227条
    最新评论
    ATL/WTL
    Big Deal
    Book