孙鑫VC++第11章图形的保存和重绘

                                                              十一、图形的保存和重绘

 

1.      转换过程:世界坐标系空间->页面空间->设备空间->物理设备空间;

 

世界坐标系空间和页面空间称为逻辑空间;

 

设备空间通常称为程序窗口的客户区;

 

物理设备空间通常就是指屏幕;

 

我们编程只负责页面空间->设备空间的转换;

 

设备空间->物理设备空间的转换只限于平移,程序员没法控制;

 

页面空间的矩形称为窗口,设备空间的矩形称为视口;

 

 

2.      设置变量时候,要是其他类要用到这个变量,那就把它设置为public;

 

3.      CPtrArray集合类,它支持void类型的指针数组;

 

4.      基类中的OnPaint函数调用了OnDraw函数,所以当窗口发生重绘的时候,只需要去视类中的OnDraw改相应代码就行了;

 

5.      窗口滚动条的实现;

 

在创建向导中把视类的基类选择为CSRollView

或者把所有继承于CView的手动改成CScrollView类就行;

 

 

在视类窗口创建之后,才在创建滚动条的时候,需要进行一些设置,要利用SetScrollSizes函数;

 

OnInitalUpdate()函数在创建窗口之后第一个调用的函数;

 

 

6.      图形错位问题

 

调用GDI函数绘图时使用的逻辑坐标,而Windows需要把其转换为设备坐标,然后输出图形;

 

在调用OnDraw函数之前,OnPaint函数调用OnPrePareDC函数来调整显示上下文的属性;

 

         因为每次窗口重绘的时候,都会调用OnPrePareDC函数,而OnPrePareDC会随着根据滚动窗口的位置来调整视口的原点;也就是说,视口的原点不是一成不变的,它会随着滚动条的位置不同而变化;

 

 

解决方法:在OnLButtonUp函数中增加几句:

 

OnPrepareDC(&dc);

dc.DPtoLp(&m_ptOrigin);

dc.DPtoLp(&point);

 

 

 

在MM_TEXT映射模式下,逻辑坐标单位和设备坐标单位都是像素;

 

 

7.      再介绍两种保存图形和重绘图形的方式:元文件和兼容设备描述表;

 

元文件要用到设备上下文类:CMetaFileDC;(存在内存中的);

 

元文件并没有包含所绘图形的图形数据,它包含的是图形的绘制命令;

 

创建元文件步骤: 1.利用CMetaFileDC构造一个元文件DC对象,然后调用该类的Create成员函数创建一个Windows元文件设备上下文,并将其已构造的CMetaFileDC对象关联起来;

 

                                       2.给已创建的元文件DC对象发送一系列的GDI命令;

                                      

                                       3.之后调用Close成员函数关闭元文件设备上下文,返回元文件句柄(HMETAFILE类型);

 

                                       4.以得到的元文件句柄为参数,利用CDC类的PlayMetaFile成员函数播放该元文件;

 

                                       5.元文件也是一种资源,通过调用DeleteMetaFile函数将其删除;

 

 

 

8.      元文件的保存与打开;

 

CopyMetaFile函数把Windows元文件的内容复制到指定的磁盘文件;

 

后缀名通常为wmf,(Windows meta File);

打开元文件:GetMetaFile

 

 

9,兼容设备描述表;(利用兼容DC在内存中准备一副图像,然后将该图像复制到目的窗口中)

 

 

         记住在调用SelectObject操作将兼容位图选入兼容DC之后,还需要调用BitBlt函数将原始设备描述表的颜色及像素数据块复制到兼容设备描述表中;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
孙鑫vc是一种特殊的混合编程语言,它结合了C语言和Verilog语言的特点。在深入详解孙鑫vc代码之前,我们先了解一下它的一些特性。 首先,孙鑫vc具有高度的可定制性。用户可以根据自己的需求选择C语言和Verilog语言中的特性来编写代码。这种灵活性使得孙鑫vc可以适用于不同的应用领域。 其次,孙鑫vc支持并行计算。它提供了一种简单而有效的方式来利用硬件资源进行并行计算,提高程序的执行效率。 另外,孙鑫vc还具有强大的调试功能。它能够在运行时对代码进行监控和调试,帮助开发者快速定位问题并进行修复。 深入详解孙鑫vc代码包括以下几个方面: 首先,我们可以从代码的结构和组织方式入手。孙鑫vc代码一般由多个模块组成,每个模块包含了各自的功能和接口。 其次,我们需要了解代码中使用的变量和数据类型。在孙鑫vc中,可以使用C语言和Verilog语言中的数据类型,如整型、浮点型等。了解这些数据类型的使用方法和限制对理解代码非常重要。 然后,我们需要分析代码中的控制流和算法。这包括了代码中的条件语句、循环语句等,以及算法的实现细节。通过对控制流和算法的分析,我们可以更好地理解代码的逻辑和实现原理。 最后,我们还需要关注代码中的接口和数据传输方式。在孙鑫vc中,模块之间通过接口进行数据的传递和交互。了解接口的定义和使用方式对于理解代码的功能和模块之间的关系非常重要。 综上所述,深入详解孙鑫vc代码需要从代码的结构和组织方式、变量和数据类型、控制流和算法、接口和数据传输方式等多个方面进行分析和理解。通过对这些方面的研究,我们可以更好地理解孙鑫vc代码,并且能够对代码进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值