一: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之间的差别是一样的。