孙鑫VC++视频学习笔记之11:图形保存和重绘.doc

孙鑫VC++视频学习笔记之11:图形保存和重绘.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
孙鑫VC视频学习笔记之11:图形保存和重绘

  1,透明画刷      CClientDC dc(this);      CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));      dc.SelectObject(pBrush);      2,保存绘制的图像(窗口重绘时仍然存在)      CGraphView类中添加m_ptOrigin,m_ptEnd,m_nDrawType三个变量,分别用于保存图像起始点、终止点和图像类型      1)构造一个CGraph类,用于存放每个对象      头文件Graph.h      #if !defined(AFX_GRAPH_H__)      #define AFX_GRAPH_H__            #if _MSC_VER 1000      #pragma once      #endif // _MSC_VER 1000            class CGraph      {      public:       UINT m_nDrawType;       CPoint m_ptOrigin;       CPoint m_ptEnd;       CGraph();       CGraph( UINT m_nDrawType,CPoint m_ptOrigin,CPoint m_ptEnd);       virtual ~CGraph();            };      2),因为不知道将会绘制多少图像对象,用集合类来替代复杂的链表结构。View类中定义,添加       CPtrArray m_ptArray;      3),在OnLButtonDown和OnLButtonUp中分别保存两个点,并在OnLButtonUp中添加以下语句,用集合类来保存图像元素      //CGraph graph(m_nDrawType,m_ptOrigin,m_ptEnd);这种方法是错误的,因为局部变量将被销毁      CGraph *pGraph;      pGraph = new CGraph(m_nDrawType,m_ptOrigin,m_ptEnd);//在堆中分配内存,不会被释放,生命周期和进程一致,直至delete出现      m_ptArray.Add(graph);            CPaintDC只能在WM_PAINT的消息相应中使用,其创建和析构调用BenginDC和EndDC      CClientDC创建时调用GetDC,析构时调用ReleaseDC      OnPrepareDC,对CScrollView调用OnPrepareDC会做调整,      OnPaint()函数为WM_PAINT的相应函数,如果没有重载OnPaint函数,那么OnPaint基函数是直接调用OnDraw函数。如果重载了OnPaint()函数,那么只有在子类中OnPaint()的调用OnDraw()            Win32应用程序接口(API)使用四种坐标空间:世界坐标系空间、页面空间、设备空间、和物理设备空间。应用程序运用世界坐标系空间对图形输出进行旋转、斜切(扭曲)或者反射      Win32 API把世界坐标系空间和页面空间成为逻辑空间;作后一种坐标空间(物理设备空间)通常指应用程序窗口的客户区;但是它也包括整个桌面、完整的窗口(包括框架、标题栏和菜单栏)或打印机的一页或绘图仪的一页纸。物理设备的尺寸随显示器、打印机或绘图仪所设置的尺寸而变化。      如果要在物理设备上绘制输出,windows把一个矩形区域从一个坐标空间拷贝到(映射到)另一个坐标空间,直至最终完整地输出呈现在物理设备上(通常是屏幕或者打印机)      如果该应用程序调用了SetWorldTransform函数,那么映射就从应用程序的世界坐标系空间开始;否则,映射在页面控件中进行。在Windows把矩形区域的每一点从一个空间拷贝到另一个空间时,它采用了一种被称为转换的算法,转换是把对象从一个坐标空间拷贝到另一个坐标空间时改变(转变)这一对象的刀削、方位、和形态,尽管转换把对象看成一个整体,但它也作用于对象中的每一点或每条线。      一个典型转换的例子      图形旋转、斜切的例子在MSDN中using Coordinate spaces and transformations中有TransformAndDraw函数的实现,可以仿照之。例如AutoCAD中对图像的切割、旋转、局部放大等。      OnInitialUpdate,窗口创建完成后,第一个被调用的函数      S

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档