Windows Gdi & CDC和HDC的区别与转换
2021-07-04 10:08
标签:lease 关于 而在 矩形 safe wm_paint 坐标 cwindowdc attach 一,GDI基础 GDI的绘图函数基本上都是有状态的,所有的函数都要求一个HDC类型的句柄。这个HDC的获得有几个途径BeginPaint,GetWindowDC, GetDC.他们的参数都只需要一个HWND就差不多了。记得调用了BeginPaint后要调用EndPaint进行清理,调用GetWindowDC和GetDC后要调ReleaseDC进行清理。 而在MFC代码中,常常遇到的CDC CPaintDC CWindowDC CClientDC。在这里稍作解释。 CDC :例如用GDI画矩形要Rectangle(hDC,...),而使用CDC则是dc.Rectangle(...),由此可见CDC主要是把原本需要HDC作为参数的GDI函数封装了一下,HDC成了它的一个成员变量。 CPaintDC CWindowDC CClientDC:他们都是从CDC继承,分别是对上面所说的BeginPaint,GetWindowDC, GetDC调用对进行封装(CPaintDC构造时调用BeginPaint,析构时调用EndPaint,其余同理)。 BeginPaint:一般用在对WM_PAINT的响应函数中使用 GetWindowDC:可获得整个Window的HDC,而GetDC仅能获得客户区的HDC,区别就在于-- 前者有效地绘制区域是整个窗口(边框、标题栏、客户区的总和)。 两者的坐标系都是相对坐标而非屏幕坐标,原点是(0,0)。即以自己可绘制区域的左上角作为原点。 二,CDC和HDC的区别与转换 一)区别与联系 HDC是句柄;CDC是MFC封装的Windows 设备相关的一个类;CClientDC是CDC的衍生类,产生对应于Windows客户区的对象 HDC是WINDOWS的一种数据类型,是设备描述句柄。 而CDC是MFC里的一个类,它封装了几乎所有的关于HDC的操作。 也可以这样说,HDC定义的变量指向一块内存,这块 内存用来描述一个设备的相关的内容,所以也可以 认为HDC定义的是一个指针;而CDC类定义一个对象, 这个对象拥有HDC定义的一个设备描述表,同时也包 含与HDC相关的操作的函数。 这与HPEN和CPen,POINT与CPoint之间的差别是一样的。 二)获得CDC * CDC* pDC pDC=GetDC(); 三)获得hdc HDC hDC; 1,hDC=GetDC(pCxp->hWnd); // windows api 2,pDC->m_hDC; // mfc CDC class member data 四)转换 CDC* pDC HDC hDC; pDC=Attach(hDC); hDC=GetSafeHDC(pDC); pDC->m_hDC==hDC Windows Gdi & CDC和HDC的区别与转换 标签:lease 关于 而在 矩形 safe wm_paint 坐标 cwindowdc attach 原文地址:https://www.cnblogs.com/endenvor/p/9855503.html
后者有效地绘制区域仅限于客户区。
下一篇:win4000-spider
文章标题:Windows Gdi & CDC和HDC的区别与转换
文章链接:http://soscw.com/essay/101691.html