ScreenToClient等4个函数的区别

上传人:平*** 文档编号:12793376 上传时间:2017-10-20 格式:DOCX 页数:7 大小:27KB
返回 下载 相关 举报
ScreenToClient等4个函数的区别_第1页
第1页 / 共7页
ScreenToClient等4个函数的区别_第2页
第2页 / 共7页
ScreenToClient等4个函数的区别_第3页
第3页 / 共7页
ScreenToClient等4个函数的区别_第4页
第4页 / 共7页
ScreenToClient等4个函数的区别_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《ScreenToClient等4个函数的区别》由会员分享,可在线阅读,更多相关《ScreenToClient等4个函数的区别(7页珍藏版)》请在金锄头文库上搜索。

1、ClientToScreen 和 ScreenToClient,DPtoLP 函数和 LPtoDP 函数DptoLP 该函数将设备坐标转变为逻辑坐标,转变依赖于设备的图形模式,窗口和坐标的起点及范围的设置,和转换的内容。函数原型:BOOL DptoLP(HDC hdc, LPPOINT lpPoints, int nCount);参数:hdc:指向设备环境的句柄。lpPoints:指向 POINT 结构数组的指针,每个 POINT 结构中的 X 和 Y 坐标将被转换。NCount:规定数组中点的数目。返回值:如果函数调用成功,返回值为非零值。否则为零LptoDP 该函数把逻辑坐标转换为设备坐标

2、,此转换依赖于设备环境的映射方式,原点的设置、窗口和观察口的范围及全局转换。函数原型:BOOL LptoDP(LPPOINT lpPoints, int nCount, HDC hdc);参数:hdc:指向设备环境的句柄。lpPoints:指向 POINT 结构数组的指针,每一个 POINT 结构中的 X 坐标和 Y 坐标将被转换。nCount:指定数组中点的数目。返回值:如果函数调用成功,返回值为非零值,否则为零。ClientToScreen 函数功能:该函数将指定点的用户坐标转换成屏幕坐标。函数原型:BOOL ClientToScreen(HWND hWnd,LPPOINT lpPoint

3、);参数:用户区域用于转换的窗口句柄。:指向一个含有要转换的用户坐标的结构的指针,如果函数调用成功,新屏幕坐标复制到此结构。返回值:如果函数调用成功,返回值为非零值,否则为零。ScreenToClient 函数功能:该函数把屏幕上指定点的屏幕坐标转换成用户坐标。函数原型:BOOL ScreenToClient(HWND hWnd, LPPOINT lpPoint);参数:hWnd:指向窗口的句柄,此窗口的用户空间将被用来转换。lpPoint:指向 POINT 结构指针,该结构含有要转换的屏幕坐标。返回值:如果函数调用成功,返回值为非零值,否则为零。CPaintDC 、CWindowDC、 CC

4、lientDC、 CDC 的区别与联系CPaintDC 、CWindowDC、 CClientDC、 CDC关系图:一句话概括:CPaintDC 无效区 dc, 相当于 BeginPaint, EndPaint CClientDC 客户区 dc, 相当于 GetDC, ReleaseDC CWindowDC 整窗口 dc, 相当于 GetWindowDC, ReleaseDC CDC 任何 dc, 相当于 CreateDC, DeleteDC一、CPaintDCMfc 自动生成的 OnPaint 函数都会定义一个 CPaintDC 类型的变量。如: cpp view plaincopy1. v

5、oid CXXXXXX:OnPaint() 2. 3. CPaintDC dc(this); / device context for painting 4. / TODO: Add your message handler code here 5. / Do not call CView:OnPaint() for painting messages 6. 7. / If you add a minimize button to your dialog, you will need the code below8. / to draw the icon. For MFC applicatio

6、ns using the document/view model, 9. / this is automatically done for you by the framework. 10. void CXXXXDlg:OnPaint() 11. 12. if (IsIconic() 13. 14. CPaintDC dc(this); / device context for painting 15. 16. SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0); 17. 18. / Center icon i

7、n client rectangle 19. int cxIcon = GetSystemMetrics(SM_CXICON); 20. int cyIcon = GetSystemMetrics(SM_CYICON); 21. CRect rect; 22. GetClientRect(&rect); 23. int x = (rect.Width() - cxIcon + 1) / 2; 24. int y = (rect.Height() - cyIcon + 1) / 2; 25. 26. / Draw the icon 27. dc.DrawIcon(x, y, m_hIcon);

8、28. 29. else 30. 31. CDialog:OnPaint(); 32. 33. MSDN 上的解释:The CPaintDC class is a device-context class derived from CDC. It performs a CWnd:BeginPaint at construction time and CWnd:EndPaint at destruction time.(翻译:CPaintDC 继承自 CDC,它在构造函数中执行 CWnd:BeginPaint,在析构函数中调用 CWnd:EndPaint)A CPaintDC object ca

9、n only be used when responding to aWM_PAINT message, usually in yourOnPaintmessage-handler member function.(翻译:CPaintDC 对象通常当响应 WM_PAINT 消息时在 OnPaint 消息处理函数中被使用。)题外话,这个英文按照中国人的逻辑来说应该这样表达:when responding to a WM_PAINT message, a CPaintDC object can only be used usually in yourOnPaintmessage-handler m

10、ember function.二、CClientDCMSDN 上的解释:The CClientDC class is derived from CDC and takes care of calling the Windows functionsGetDC at construction time andReleaseDC at destruction time. This means that the device context associated with aCClientDC object is the client area of a window.(翻译:CClientDC 继承

11、自 CDC,它在构造函数中调用 GetDC,在析构函数中调用ReleaseDC.这意味着与 CClientDC 对象联系的 DC 是窗口的客户区。)三、CWindowDCThe CWindowDC class is derived from CDC. It calls the Windows functionsGetWindowDC at construction time andReleaseDC at destruction time. This means that aCWindowDC object accesses the entire screen area of aCWnd (b

12、oth client and nonclient areas).( 翻译:获取整个屏幕区域,包括客户区和非客户区。)CSDN:CPaintDC 只能在 OnPaint()中使用,CClientDC 只和客户区有关,可以在任何地方使用。CPaintDC 代表整个窗口,而 CClientDC 代表窗口的客户区(不包括标题栏、边框),要选择合适的 DC 进行绘制。CPaintDC 一般是用在 OnPaint()函数里的。CPaintDC 对象一构造,消息队列中的WM_PAINT 会被取走,而 CClientDC 是用在非 OnPaint()函数里画图的。用 CClientDC 时 WM_PAINT

13、消息没有从消息队列中清除,CPaintDC 结束时会自动清除该消息。CPaintDC 是一个特殊的设备环境封闭类,它主要处理 windows 的 wm_paint 消息。CClientDC 可以自动调用 GetDC 和 ReleaseDC 函数。CwindowDC 是从 CDC 类继承,用于得到桌面窗口设备环境指针。CclinetDC 用于窗口客户区,CwindowDC 用于整个窗口,包括非客户区。在 OnPaint 中用 CPaintDC 仅仅对需要刷新的地方进行重绘。 往一个对话框上画图,在 OnPaint()里是不是只能用 CPaintDC? 恰恰相反,CPaintDC 是推荐只用在 O

14、nPaint 中的。诚如 i_noname(晚九朝五) 所言:“它的范围是 WM_PAINT 消息所要重画的区域大小”,因为这个类的构造函数中调用了BeginPaint,析构函数中调用了 EndPaint。这两个 API 是针对 WM_PAINT 消息使用的,所以不要把 CPaintDC 用在非对 WM_PAINT 消息响应的函数中CPaintDC、CClientDC、CWindowDC 和 CMetaFileDC 类的主要特点及区别1、 设备环境(DC) ( 1)在 Windows 中,显示工作是基于设备环境的。所谓设备环境(DC)是一种Windows 数据结构,该结构包含应用程序设备输出时

15、所需要的信息。( 2)在使用任何绘图函数之前必须建立一个设备环境对象。(3)在 Visual C+ 6.0 的 MFC 中提供了设备环境类 CDC,它封装了绘图所需要的所有函数,其中包括了大多数的 Windows API 中的 GDI 函数。 2、 设备环境类2.1. CDC 类( 1)CDC 类是 CObject 类的派生类,也是所有设备环境类的基类。CDC 类定义了一个设备描述对象,并提供了对设备描述对象进行操作的成员函数以及对与窗口客户区有关的显示区进行操作的成员函数。(2)CDC 类提供的成员函数可以用于操作设备描述对象、使用绘图工具、选择图形设备界面,以及操作颜色和调色板,还用于取得和设置绘图属性、映射方式、视图和窗口范围的操作、坐标的转换、区域的使用、剪取、画线以及绘制图形和文字等操作。2.2. CPaintDC 类(1 ) CPaintDC 类是 CDC 类的一个派生类,该类一般用在响应 WM_PAINT 消息的函数OnPaint()中。(2 ) WM_PAINT 消息是当窗口的某个区域需要重画时激发的窗口消息。当程序中的消息循环接到 WM_

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号