博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第八章 图形编程 笔记
阅读量:5925 次
发布时间:2019-06-19

本文共 1590 字,大约阅读时间需要 5 分钟。

1. 一个简单的图形程序

给CExample3View类添加一个成员变量 CPoint m_jumpOffPoint来记录鼠标按下的位置。在构造函数中初始化为0.

接下来编写OnLButtonDown()和OnLButtonUp()函数 如下

void CExample3View::OnLButtonDown(UINT nFlags, CPoint point) {    m_jumpOffPoint = point;     //记录鼠标按下的位置        CView::OnLButtonDown(nFlags, point);}
void CExample3View::OnLButtonUp(UINT nFlags, CPoint point) {    HDC hdc;    hdc = ::GetDC(m_hWnd);       //获取设备环境句柄    MoveToEx(hdc, m_jumpOffPoint.x, m_jumpOffPoint.y, NULL);  //移动到线条的起点    LineTo(hdc, point.x, point.y);          //画线,从线条的起点到鼠标放开的位置    ::ReleaseDC(m_hWnd, hdc);    //释放设备环境句柄        CView::OnLButtonUp(nFlags, point);}

2. 设备环境相关类

       2.1 CDC类

void CExample3View::OnLButtonUp(UINT nFlags, CPoint point) {    CDC *pDC = GetDC();   HDC是一个句柄,而CDC是MFC提供的绘图类    pDC->MoveTo(m_jumpOffPoint);    pDC->LineTo(point);    ReleaseDC(pDC);        CView::OnLButtonUp(nFlags, point);}

上述代码和SDK全局函数实现的效果一样。

 

       2.2 CPaintDC类

       CPaintDC以及后面的CClientDC, CWindowDC都是派生自DCD。封装了一些操作,使用完后不需要调用ReleaseDC()。

       CPaintDC对象一般是用在WM_PAINT消息响应函数中,但只有当窗口的客户区部分或全部“无效”而需要“刷新”时需要发送WM_PAINT消息。

 

       2.3 CClientDC类

       CClientDC类对象只能在窗口的客户区进行图形绘制。

       CClientDC对象构造时采用的是GetDC()函数来获取环境句柄,而不是BeginPaint()函数。

       BeginPaint()函数获取的设备环境是客户区中的无效矩形区,随后的绘图操作只能在该无效矩形区中进行。并且可以自动将无效矩形区变为有效。GetDC()函数获取的设备环境是整个客户区,随后的绘图操作可以在客户区的任意部分进行。但是不能将任何无效矩形区变为有效。

void CExample3View::OnLButtonUp(UINT nFlags, CPoint point) {    CClientDC dc(this);    dc.MoveTo(m_jumpOffPoint);    dc.LineTo(point);        CView::OnLButtonUp(nFlags, point);}

2.4 CWindowDC类

       CWindowDC可以获得整个窗口的设备句柄,包括客户区和非客户区,也就是说,可以在一个窗体的任何位置进行绘图。

转载于:https://www.cnblogs.com/tangzhengyue/archive/2012/07/04/2576717.html

你可能感兴趣的文章
java与xml
查看>>
Javascript异步数据的同步处理方法
查看>>
快速排序——Java
查看>>
unity游戏与我
查看>>
187. Repeated DNA Sequences
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
基于事件驱动的DDD领域驱动设计框架分享(附源代码)
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
行列式的乘法定理
查看>>
linux下内存释放问题
查看>>
让Java和JavaScript进行交互
查看>>
LINQ之路12:LINQ Operators之数据转换(Projecting)
查看>>
SQL Server:数据库角色
查看>>
分享8个超棒的基于HTML5和jQuery的开发教程
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
SpringMVC+Swagger详细整合
查看>>
计算机视觉领域最全汇总(第2部分)
查看>>
[译] 所有你需要知道的关于完全理解 Node.js 事件循环及其度量
查看>>