VC++编程增加缩放功能.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC++编程增加缩放功能.doc

VC++编程增加缩放功能 VC++编 摘要本文阐述了在VisualC++中为CScrollView增加缩放功能具体设计方案,实现 过程中可能出现的问题及其解决方法,将实现代码集成为一个MFC扩展类,并 给出了完整的程序清单 关键词VisualC++.CScrolIView.缩放,MFC扩展类 许多Windows应用程序都要求能对窗口的内容进行任意的 缩放.最常见的一个例子就是打印预览,在打印预览中里能对 被打印页随意进行放大或缩小.但是任意缩放是如何实现的. 关于这个话题的编程信息却少得可怜.在本文中我讲述了如何 使一个窗口具有缩放能力.并且将实现代码集成为一个MFC 扩展类(CZoomView). 一 ,缩放简介 在MicrosoftWindows实现正确的缩放瞄要你确I殳置一 个窗口的映射模式,窗口区域,窗口起始点,视u区域和视口 起始点等.你现在是不是巳经有一点困扰_r?你可以试着先读 一 读有关SetWindowExt的帮助信息;设置窗口的X范围及 Y范围……,但实际L这并不是这个AP[函数的核心功能. 关健是紧接着的一旬:定义GDI如何将逻辑坐标系中柏点映 射成为设备坐标系中的点.虽然这条信息并没有告诉你如何 使用它,但是已经为如何实现缩放提供了线索——从一个坐标 系映射成为另一个坐标系.为了使缩放实现起来容易一些.我 想让Windows操作系统做尽可能多的工作.幸运舳是.通过学 习一点WindowsAPI的知识.可以很容易地达到这一点 为了在窗口中能自由缩放一个页(窗口中的内容).必须 要了解两个概念.一是怎样域一个页,二是显示这个页. 二,画一个页 你首先要做的就是为你在窗口中的绘图(不妨先假设你要 通过窗口展示你的绘画才能)选定逻辑范圊.你可以把 逻辑范围当作是你将要画的个页的垂直以及水平范围. 这就是所谓的WindowExtent(窗口范围),需要用AH 函数SetWindowExt米设定.比如setWindowExt(800.90o)就 表示窗iq町供绘图的范围是800×900(逻辑单位)需要值 得注意的是,此时的单位可以代表你所选择的度量单位. 但本身却并不是像素,英寸,厘米或者其它的什么单位. 一 旦你选定了逻辑坐标系,所有的GDI函数都会以此作 为基准.比如,你想从一个页的左上角到右下角藏一条赢线, 该页的逻辑范围巳被设定为[00X10O(逻辑单位).那么. 你血浚将【0,0】传递给MoveTo函数作为起始坐标.将l100, 100I传递给LinoTo函数作为结束坐标 使用逻辑单位允许你的程序独直于设备进行显示.所有的 对象的坐标都以逻辑单位进行存储,这样当你进行窗口鳙放或 者改变屏幕大小时,就无需做一些额外的转换工作.而当你进 行显示或者打印时.就需要将对象的逻辑单位转换成设备单位 进行显示或者打印.这部分工作将由Windows操作系统自动完 成.具体内容将在下面介绍. - ■●●■■●--■--■●k●k●k,k-■-●●k●■●k■k●k,k■k,k,k-■t,k-●--●■-^-_-●■-k-●■-●k■■●■k-■}■ Skin26后邮件群发器的两种界面效果. 以L程序在Delphi7.0Entvrpri~+Wiu2000Pn.ffessional环 境下编译通过.(使用代理服务器网络中未经测试) 注意:目前大部分网站的SMTP邮件服务器都要求用户进 行身份验证.即要求用户给出用户帐号和密码信息,森则尤法 发送,例如163net.263.net.sinsc~om.帅bu.OOm等.本程 序正是利用Delphi7中古了身份验证的先进IndyI匈件组的 SMTP包来完成邮件群发的功能在初次使用时.请先设置本 程序系统设置中的信息; (收祷日期:2005年10月26日) 需 功 殷 缩 口办 ¨蕾 C 口蕾 T 三,显示一个页 现在你知道了绘图用的是逻辫坐标.而显示用的是设备啦 标,对于屏幕来说就是以像素为单位 接着你需要设置封口的视口大小(以像素为单位),这就 是所谓的VivwportExtezlt(视口范围),需要用到AI1函 数SvWiewportExt这并不是说要限制窗口的大小,而是描述 了你的逻辑单位是如何映射成为像隶单位.通过设置窗口范围 为{1o0,100}而同刊视口范围为l200.2001.你就设定了 100×100逻辑单位等于200x200像素.你可以调用L~oDP 函数或D~oLP函数在逻辑座标与设蔷坐标之问进行转换. 当你设置好了窗口范围以及视口范围以后.接着你需要通 过SetMapMode函数来政变映射模式当你使用了SetWin. dowExtent和s眦VIwp0nExtcnl 式有效——MMJs(1TR()PIc和 OPIC模式可以保证在水平和垂直方向上的放大比例相同.

文档评论(0)

cai + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档