mfc滚动窗口.ppt_第1页
mfc滚动窗口.ppt_第2页
mfc滚动窗口.ppt_第3页
mfc滚动窗口.ppt_第4页
mfc滚动窗口.ppt_第5页
已阅读5页,还剩14页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、滚 动 窗 口,窗口具有滚动功能,(1) 基类要从CScrollView派生,在已有工程上添加滚动功能,可采用替换将CView换为CScrollView。 (2)要设置滚动的大小,还有点击箭头滚动的数量,以及点击滚动栏空白的地方滚动的数量 。通过SetScrollSizes。 这个函数到底在哪调用合适呢? 当然是窗口创建之后,可以利用虚函数OnInitialUpdate,该函数在OnDraw前调用。我们经常会在窗口创建之后做一些初始化工作,就可以放在这个函数内,因为它是窗口完全创建之后第一个调用的函数。所以利用这个特点,可进行一些初始化工作。,坐标空间,Microsoft Windows下的程

2、序运用坐标空间和转换来对图形输出进行缩放、旋转、平移、斜切和反射。 一个坐标空间是一个平面的空间,通过使用两个相互垂直并且长度相等的轴来定位二维对象。,(0,0),Xmax,Xmin,Ymax,Ymin,坐标空间,Win32应用程序设计接口(API)使用四种坐标空间:世界坐标系空间、页面空间、设备空间、和物理设备空间。应用程序运用世界坐标系空间对图形输出进行旋转、斜切或者反射。 Win32 API把世界坐标系空间和页面空间称为逻辑空间;最后一种坐标空间(即物理设备空间)通常指应用程序窗口的客户区;但是它也包括整个桌面、完整的窗口(包括框架、标题栏和菜单栏)或打印机的一页或绘图仪的一页纸。物理设

3、备的尺寸随显示器、打印机或绘图仪所设置的尺寸而变化。,,,转换,如要在物理设备上绘制输出,Windows把一个矩形区域从一个坐标空间拷贝到(或映射到)另一个坐标空间,直至最终完整的输出呈现在物理设备上(通常是屏幕或打印机) 如果该应用程序调用了SetWorldTransform函数,那么映射就从应用程序的世界坐标系空间开始;否则,映射在页面空间中进行。在Windows把矩形区域的每一点从一个空间拷贝到另一个空间时,它采用了一种被称作转换的算法,转换是把对象从一个坐标空间拷贝到另一个坐标空间时改变(或转变)这一对象的大小、方位、和形态,尽管转换把对象看成一个整体,但它也作用于对象中的每一点或每条

4、线。,转换,Ymax,Ymin,世界坐标系空间,运用SetWorldTransform函数而进行的一个典型转换,Ymax,Ymin,页面空间,Ymin,Ymax,设备空间,物理设备,页面空间到设备空间的转换,页面空间到设备空间的转换是Windows接口的一部分。这种转换确定与一特定设备描述表相关的所有图形输出的映射方式。 所谓映射方式是指确定用于绘图操作的单位大小的一种量度转换。映射方式是一种影响几乎任何客户区绘图的设备环境属性。另外还有四种设备环境属性:窗口原点、视口原点、窗口范围和视口范围,这四种属性与映射方式密切相关。,页面空间到设备空间的转换,页面空间到设备空间的转换所用的是两个矩形的

5、宽与高的比率,其中页面空间中的矩形被称为窗口,设备空间中的矩形被称为视口,Windows把窗口原点映射到视口原点,把窗口范围映射到视口范围,就完成了这种转换。,窗口原点,视口原点,窗口,视口,页面空间,设备空间,设备空间到物理空间的转换,设备空间到物理空间的转换有几个独特之处:它只限于平移,并由Windows的窗口管理部分控制,这种转换的唯一用途是确保设备空间的原点被映射到物理设备上的适当点上。没有函数能设置这种转换,也没有函数可以获取有关数据。,默认转换,一旦应用程序建立了设备描述表,并立即开始调用GDI绘图或输出函数,则运用默认页面空间到设备空间的转换和设备空间到客户区的转换(在应用程序调

6、用SetWorldTransform函数之前,不会出现世界坐标空间到页面空间的转换)。 默认页面空间到设备空间的转换结果是一对一的映射;即页面空间上给出的一点映射到设备空间的一个点。这种转换没有以矩阵指定,而是通过把视口宽除以窗口宽,把视口高除以窗口高而得出的。在默认的情况下,视口尺寸为1x1个象素,窗口尺寸为1x1页单位。,默认转换,设备空间到物理设备(客户区、桌面或打印机)的转换结果总是一对一的;即设备空间的一个单位总是与客户区、桌面、或打印机上的一个单位相对应。这一转换的唯一用途是平移。无论窗口移到桌面的什么位置,它永远确保输出能够正确无误地出现在窗口上。 默认转换的一个独特之处是设备空

7、间和应用程序窗口的y轴方向。在默认的状态下,y轴正向朝下,负y方向朝上。,逻辑坐标和设备坐标,几乎在所有的GDI函数中使用的坐标值都是采用的逻辑单位。Windows必须将逻辑单位转换为“设备单位”,即像素。这种转换是由映射方式、窗口和视口的原点以及窗口和视口的范围所控制的。 Windows对所有的消息(如WM_SIZE、WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_LBUTTONUP),所有的非GDI函数和一些GDI函数(例如GetDeviceCaps函数),永远使用设备坐标。 “窗口”是基于逻辑坐标的,逻辑坐标可以是象素、毫米、英寸等单位;“视口”是基于设备坐标(象素)的。通

8、常,视口和客户区是相同的。 缺省的映射模式为MM_TEXT。在这种映射模式下,逻辑单位和设备单位相同。,逻辑坐标和设备坐标的相互转换,窗口(逻辑)坐标转换为视口(设备)坐标的两个公式: xViewport=(xWindow-xWinOrg)* +xViewOrg yViewport=(yWindow-yWinOrg)* +yViewOrg 视口(设备)坐标转换为窗口(逻辑)坐标的两个公式: xWindow=(xViewPort-xViewOrg)* +xWinOrg yWindow=(yViewPort-yViewOrg)* +yWinOrg,xViewExt,xWinExt,yViewExt

9、,yWinExt,xWinExt,xViewExt,yWinExt,yViewExt,在MM_TEXT映射方式下逻辑坐标和设备坐标的相互转换,窗口(逻辑)坐标转换为视口(设备)坐标的两个公式: xViewport = xWindow-xWinOrg+xViewOrg yViewport = yWindow-yWinOrg+yViewOrg 视口(设备)坐标转换为窗口(逻辑)坐标的两个公式: xWindow = xViewport-xViewOrg+xWinOrg yWindow = yViewport-yViewOrg+yWinOrg,视口和窗口原点的改变,CDC中提供了两个成员函数SetVi

10、ewportOrg和SetWindowOrg,用来改变视口和窗口的原点。 如果将视口原点设置为(xViewOrg,yViewOrg),则逻辑点(0,0)就会被映射为设备点(xViewOrg,yViewOrg)。如果将窗口原点改变为(xWinOrg,yWinOrg),则逻辑点(xWinOrg,yWinOrg)将会被映射为设备点(0,0),即左上角。 不管对窗口和视口原点作什么改变,设备点(0,0)始终是客户区的左上角。,关于图形错位的说明,当我们在窗口中点击鼠标左键的时候,得到的是设备坐标(680,390),在MM_TEXT的映射模式下,逻辑坐标和设备坐标是相等的,所以我们利用集合类保存的这个点

11、的坐标是以象素为单位,坐标值为(680,390)。在调用OnDraw函数前,在OnPaint函数中调用了OnPrepareDC函数,调整了显示上下文的属性,将视口的原点设置为了(0,-150),这样的话,窗口的原点,也就是逻辑坐标(0,0)将被映射为设备坐标(0,-150),在画线的时候,因为GDI的函数使用的是逻辑坐标,而图形在显示的时候,Windows需要将逻辑坐标转化为设备坐标,因此,原先保存的坐标点(680,390)(在GDI函数中,作为逻辑坐标使用),根据转换公式xViewport = xWindow-xWinOrg+xViewOrg 和yViewport = yWindow-yWi

12、nOrg+yViewOrg,得到设备点的x坐标为680-0+0=680,设备点的y坐标为390-0+(-150)=240,于是我们看到图形在原先显示地方的上方出现了。,void CView:OnPaint() / standard paint routine CPaintDC dc(this); OnPrepareDC( ,如何解决,首先我们在绘制图形之后,在保存坐标点之前,调用OnPrepareDC函数,调整显示上下文的属性,会将视口的原点设置为(0,-150),这样的话,窗口的原点,也就是逻辑坐标(0,0)将被映射为设备坐标(0,-150),然后我们调用DPtoLP函数将设备坐标(680,390)转换为逻辑坐标,根据设备坐标转换为逻辑坐标的公式: xWindow = xViewport-xViewOrg+xWinOrg, yWindow = yViewport-yViewOrg+yWinOrg, 得到逻辑点的x坐标为680-0+0=680, y坐标为390-(-150)+0=540, 将逻辑坐标(680,540)保存起来。,如何解决,在窗口重绘时,会先调用OnPrepareDC函数,调整显示

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论