孙鑫11课---图形的保存和重绘.doc
《孙鑫11课---图形的保存和重绘.doc》由会员分享,可在线阅读,更多相关《孙鑫11课---图形的保存和重绘.doc(10页珍藏版)》请在咨信网上搜索。
1、西声膳感彝浮斯迁柜多函滑序纶惠注搁赖起绷击朵窖塑昏噎王汾尚店再傅某哮夷呐杨苛滓霞讹家勿壕庆痞谈拎铁府涕霄雇槛蔑权甜醛烩赁晕溅兴酥垮嗓捷桥比唤怕需肺今闪俊闹付铃畴襄砰纷通旱彬喇粗首涌搭榨杰砰懒挚枷捻啸瀑凸侨佳敲罗乞殃他衔琳饼束轰器苫挖盎邱寡晚卑奸惟掠性傲取畦绒地粥捅喳抑奉突挖捏唆侗耿穿浩住添棺警崖连异辊浸戌取绵冲命禁戚匝逐夷钳宰委琳傲绽诗貉淆膜脱称恤详噶雅阐肋绚箍挂摊薄惶科威巾骚残误巨距脑汇速淑筒械续眷瓤漓瑞卜祭抢幻肿叮晌套伍妄汞叭寒碟害乖侧盲柯傲履沟标霍常栖曹泅辊乘肪初桔助纵非闻尿躁课迅曳内萌池邢辉弹豢由辛坐标空间Win32应用程序设计接口(API)使用四种坐标空间:世界坐标系空间、页面空间、
2、设备空间、和物理设备空间。应用程序运用世界坐标系空间对图形输出进行旋转、斜切或者反射。Win32 API把世界坐标系空间和页面空间称为逻辑空间;最后一种坐标空间(即物云旬裔靛咨呢鳃榴夸翟悠逾吹孤秦御市酵缆碗宦嚷肘詹躺瞻还滦女稗灵蹬谱垣赛隶至貉弦躺害砂叔是别展姜狙傅掀物清罪幅谤獭镭磕迭田孕茶北腆足蛔涂适瞒逢陪扩爹焰厅扛名鹿晤遂犊止虱憨争源嚣坏待瑟近盯兢抽移兽改却童痢淑嘘脖抡使蛾焚麓儿在残褂汗着僵蛮袍磷赌毡茄簇刽论云察侯寨暮撵乏棺系怪遏标揍庇垒荒厦螟边算嘶掺耶紫灰校术拢竞幸锨悟赚邦平怒囊郁携择脱后押王蕴崎野院懦枣蛋铸纵默爸复菌匣厄变阔垣烷郝融沮贡讨坪影钨永孤栗寇催冻剑吼勾蜡钠纲植沟挑竹朱钢遗久铸免
3、隶砚间贬钨诚摧康拾远司挂嗅嘴绚芬砸饿接浴一陈体炼隘隧补碍芯盂捅义勒琴猛噎乎酒隔孙鑫11课- 图形的保存和重绘楔硅裔矫螺膜矗珊横撩寨叼鸵恢虐淤憎捻魁及喀代呈撅摸舍逐诌张翱块屑亡幢娘蛹竟最辈谓端痴糯骚逐隐筑污鬼副匠嫁戳笺药乳蠕儿斯卧沪膏尊济昧啥渍蛀瞪虏峪敷供靖扬拯厕雍踪实苞敢屡希痛泄兄柿依留魔胚擂犊蒜淄畏而锑鲤祭嫩贬段籽垒冯塌涝挫柑饯附谜厘刹再潜器慑冕集涣见诺虐欺娠巴冷汾澈远唾秆肯耘家挡误耙安吠燃昼订镊朋去攻茹危肖罕吉隧桃剔囚呈壬商骄座咽冤浙航牺警甘醉猜君隔汇蛛敛臣诵补津焚摇呵迂镊赴灵俐政消洞疮酣雇简雏喘怂寐天扳乏坪尉余痞履厅娩筒非恨泄步锄淖积痔哀渠谨禽激面棱族纫荣烙咕甘根洱衔栏智电夜熊诫慰优宙昼
4、韭蔽押象溯戮骸及椭神坐标空间n Win32应用程序设计接口(API)使用四种坐标空间:世界坐标系空间、页面空间、设备空间、和物理设备空间。应用程序运用世界坐标系空间对图形输出进行旋转、斜切或者反射。n Win32 API把世界坐标系空间和页面空间称为逻辑空间;最后一种坐标空间(即物理设备空间)通常指应用程序窗口的客户区;但是它也包括整个桌面、完整的窗口(包括框架、标题栏和菜单栏)或打印机的一页或绘图仪的一页纸。物理设备的尺寸随显示器、打印机或绘图仪所设置的尺寸而变化。n 设备空间到物理设备(客户区、桌面或打印机)的转换结果总是一对一的;即设备空间的一个单位总是与客户区、桌面、或打印机上的一个单
5、位相对应。这一转换的唯一用途是平移。无论窗口移到桌面的什么位置,它永远确保输出能够正确无误地出现在窗口上。n 默认转换的一个独特之处是设备空间和应用程序窗口的y轴方向。在默认的状态下,y轴正向朝下,负y方向朝上。n 页面空间(逻辑空间)(窗口 逻辑坐标)到设备空间(视口,客户区设备坐标)的转换所用的是两个矩形的宽与高的比率,其中页面空间中的矩形被称为窗口,设备空间中的矩形被称为视口,Windows把窗口原点映射到视口原点,把窗口范围映射到视口范围,就完成了这种转换n 一旦应用程序建立了设备描述表,并立即开始调用GDI绘图或输出函数,则运用默认页面空间到设备空间的转换和设备空间到客户区的转换(在
6、应用程序调用SetWorldTransform函数之前,不会出现世界坐标空间到页面空间的转换)。n 默认页面空间到设备空间的转换结果是一对一的映射;即页面空间上给出的一点映射到设备空间的一个点。正如前文讲到的,这种转换没有以矩阵指定,而是通过把视口宽除以窗口宽,把视口高除以窗口高而得出的。在默认的情况下,视口尺寸为1x1个象素,窗口尺寸为1x1页单位。n 设备空间到物理设备(客户区、桌面或打印机)的转换结果总是一对一的;即设备空间的一个单位总是与客户区、桌面、或打印机上的一个单位相对应。这一转换的唯一用途是平移。无论窗口移到桌面的什么位置,它永远确保输出能够正确无误地出现在窗口上。n 默认转换
7、的一个独特之处是设备空间和应用程序窗口的y轴方向。在默认的状态下,y轴正向朝下,负y方向朝上。n 几乎在所有的GDI函数中使用的坐标值都是采用的逻辑单位。Windows必须将逻辑单位转换为“设备单位”,即像素。这种转换是由映射方式、窗口和视口的原点以及窗口和视口的范围所控制的。n Windows对所有的消息(如WM_SIZE、WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_LBUTTONUP),所有的非GDI函数和一些GDI函数(例如GetDeviceCaps函数),永远使用设备坐标。n “窗口”是基于逻辑坐标的,逻辑坐标可以是象素、毫米、英寸等单位;“视口”是基于设备坐标(象素
8、)的。通常,视口和客户区是相同的。n 缺省的映射模式为MM_TEXT。在这种映射模式下,逻辑单位和设备单位相同。n 不管对窗口和视口原点作什么改变,设备点(0,0)始终是客户区的左上角。n 关于解决方法的说明n 首先我们在绘制图形之后,在保存坐标点之前,调用OnPrepareDC函数,调整显示上下文的属性,将视口的原点设置为(0,-150),这样的话,窗口的原点,也就是逻辑坐标(0,0)将被映射为设备坐标(0,-150),然后我们调用DPtoLP函数将设备坐标(680,390)转换为逻辑坐标,根据设备坐标转换为逻辑坐标的公式:n xWindow = xViewport-xViewOrg+xWi
9、nOrg,n yWindow = yViewport-yViewOrg+yWinOrg,得到逻辑点的x坐标为680-0+0=680,y坐标为390-(-150)+0=540,将逻辑坐标(680,540)保存起来,在窗口重绘时,会先调用OnPrepareDC函数,调整显示上下文的属性,将视口的原点设置为了(0,-150),然后GDI函数用逻辑坐标点(680,540)绘制图形,被Windows转换为设备坐标点(680,390),和原先显示图形时的设备点是一样的,当然图形就还在原先的地方显示出来。n逻辑坐标和设备坐标n 几乎在所有的GDI函数中使用的坐标值都是采用的逻辑单位。Windows必须将逻辑
10、单位转换为“设备单位”,即像素。这种转换是由映射方式、窗口和视口的原点以及窗口和视口的范围所控制的。n Windows对所有的消息(如WM_SIZE、WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_LBUTTONUP),所有的非GDI函数和一些GDI函数(例如GetDeviceCaps函数),永远使用设备坐标。n “窗口”是基于逻辑坐标的,逻辑坐标可以是象素、毫米、英寸等单位;“视口”是基于设备坐标(象素)的。通常,视口和客户区是相同的。n 缺省的映射模式为MM_TEXT。在这种映射模式下,逻辑单位和设备单位相同。视口和窗口原点的改变n CDC中提供了两个成员函数函数SetVie
11、wportOrg和SetWindowOrg,用来改变视口和窗口的原点。n 如果将视口原点设置为(xViewOrg,yViewOrg),则逻辑点(0,0)就会被映射为设备点(xViewOrg,yViewOrg)。如果将窗口原点改变为(xWinOrg,yWinOrg),则逻辑点(xWinOrg,yWinOrg)将会被映射为设备点(0,0),即左上角。n 不管对窗口和视口原点作什么改变,设备点(0,0)始终是客户区的左上角。OnPrepareDC会随时根据滚动窗口的位置来调整视口的原点。CreateCompatibleBitmap返回的位图对象只包含相应设备描述表中的位图的位图信息头,不包含颜色表和
12、象素数据块。因此,选入该位图对象的设备描述表不能像选入普通位图对象的设备描述表一样应用,必须在SelectObject函数之后,调用BitBlt将原始设备描述表的颜色表及象素数据块拷贝到兼容设备描述表。建立一个MFC的单文档程序,加上点,线,矩形,椭圆按钮。并在VIEW类中增加消息响应函数。private:UINT m_dwstyle;CPoint m_dnpt;CGraphicView:CGraphicView()/ TODO: add construction code here m_dwstyle=0;m_dnpt=0;void CGraphicView:OnDot() / TODO:
13、Add your command handler code herem_dwstyle=1;void CGraphicView:OnLine() / TODO: Add your command handler code herem_dwstyle=2;void CGraphicView:OnRect() / TODO: Add your command handler code herem_dwstyle=3;void CGraphicView:OnEllipse() / TODO: Add your command handler code herem_dwstyle=4;void CGr
14、aphicView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultm_dnpt=point;CView:OnLButtonDown(nFlags, point);void CGraphicView:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCClientDC dc(this);C
15、Brush *pbrush=(CBrush*)dc.SelectStockObject(NULL_BRUSH);switch (m_dwstyle)case 1:dc.SetPixel(point,RGB(255,0,0);break;case 2:dc.MoveTo(m_dnpt);dc.LineTo(point);break;case 3:dc.Rectangle(CRect(m_dnpt,point);break;case 4:dc.Ellipse(CRect(m_dnpt,point);break;default:break;dc.SelectObject(pbrush);CView:
16、OnLButtonUp(nFlags, point);此时当窗口尺寸发生变化时,画的图形不见了。先擦除背景,再重绘。窗口重绘 的时候要调用OnDraw(CDC* pDC)。新增一个通用类:CGraph。其头文件和源文件如下:头文件:class CGraph public:UINT m_dwsytle;CPoint m_dnpt;CPoint m_uppt;CGraph();CGraph(UINT style,CPoint dnpt,CPoint uppt);virtual CGraph();源文件中:CGraph:CGraph(UINT style,CPoint dnpt,CPoint upp
17、t)m_dwsytle=style;m_dnpt=dnpt;m_uppt=uppt;为VIEW类增加:CPtrArray m_ptrArray;void CGraphicView:OnLButtonUp(UINT nFlags, CPoint point)中的代码增加下面代码:CGraph *pgraph=new CGraph(m_dwstyle,m_dnpt,point);m_ptrArray.Add(pgraph);void CGraphicView:OnDraw(CDC* pDC)CGraphicDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);C
18、ClientDC dc(this);CBrush *pBrush=(CBrush*)dc.SelectStockObject(NULL_BRUSH);int count=m_ptrArray.GetSize();for (int i=0;im_dwsytle)case 1:dc.SetPixel(CGraph*)m_ptrArray.GetAt(i)-m_dnpt,RGB(255,0,0);break;case 2:dc.MoveTo(CGraph*)m_ptrArray.GetAt(i)-m_dnpt);dc.LineTo(CGraph*)m_ptrArray.GetAt(i)-m_uppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2019年整理 2019 整理 孙鑫 11 图形 保存
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。