CWnd,HWND; CDC,HDC

一:CWnd、HWND、HANDLE
CWnd: Window Class 窗口基类
HWND: Window Handle 窗口句柄
HANDLE: handle 句柄
(1)HWND   hWnd;   
    CWnd *pWnd = CWnd::FromHandle(hWnd);
(2)CWnd *pWnd = GetDlgItem(IDC_STATIC_SHOW);
    HWND hWnd = pWnd->m_hWnd; //m_hWnd是CWnd的一个成员
(3)CWnd *pWnd = GetDlgItem(IDC_STATIC_SHOW);
    pWnd = GetClientRect(&rect);
    CDC *pDC = pWnd->GetDC();
    StrectchDIBits(pDC->m_hDC, ...);
 
二:CDC、HDC
DC: Device Context 设备描述表,一种包含设备信息的数据结构
CDC: DC的基类
HDC: DC的句柄
(1)HDC hdc = ::GetDC(m_hWnd); //m_hWnd是当前窗口句柄
    ::ReleaseDC(m_hWnd, hdc);
(2)CDC* pDC = GetDC();
   ReleaseDC(pDC);
(3)CClientDC是CDC的派生类,管理窗口客户区的显示。使用它定义DC对象,不需要显式调用GetDC和ReleaseDC函数。
    CClientDC dc(this);
    dc.MoveTo(0,0);
    dc.LineTo(100,100);
(4)CWindowDC是CDC的派生类,管理这个窗口的显示。使用它定义DC对象,不需要显式调用GetDC和ReleaseDC函数。
    CWindowDC dc(this);
    dc.MoveTo(0,0);
    dc.LineTo(100,100);
(5)CPaintDC是CDC的派生类,只能应用在OnPaint()函数中。
    CPaintDC dc(this);
    HDC hdc = dc.GetSafeHdc();

//或HDC hdc = dc.m_hDC;

三:HDC,CDC,CClientDC的区别和联系是什么?

HDC,CDC,CClientDC的区别和联系是什么? 

HDC是句柄;
CDC是MFC封装的Windows设备相关的一个类;
CClientDC是CDC的衍生类,产生对应于Windows客户区的对象.

pDC 是类指针   
HDC 是windows句柄通过pDC获得hdc:   
HDC hdc=pDC->GetSafeHdc(); 通过hdc获得pDC:   
CDC *pDC=new CDC;   
pDC->Attach(hdc);

HDC是WINDOWS的一种数据类型,是设备描述句柄。
   
***而CDC是MFC里的一个封装类,它封装了几乎所有的关于HDC的操作。该类提供了一个数据成员m_hDC,用来保存与CDC类相关的DC句柄。 HDC m_hDC;   

也可以这样说,HDC定义的变量指向一块内存,这块内存用来描述一个设备的相关的内容,所以也可以认为HDC定义的是一个指针;而CDC类定义一个对象,这个对象拥有HDC定义的一个设备描述表,同时也包含与HDC相关的操作的函数.这与HPEN和CPen,POINT与CPoint之间的差别是一样的。


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值