07第七章 MF程序设计-窗口绘图.ppt

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

MFC程序设计 窗口绘图 主要内容 DC相关概念和知识 画直线和曲线 画封闭图形 画笔和CPen类 画刷和CBrush类 画文本 字体和CFont类 删除GDI对象 取消对GDI对象的选定 概述 GDI利用DC(设备上下文、设备描述表、设备内容、设备环境)将各程序的输出限制在自己的窗口中 DC(Device Context) Windows程序在屏幕、打印机或其他输出设备上画图时,它并不是将像素直接输出到设备上.而是将图绘制到由DC表示的逻辑意义上的“显示乎面”上去。 设备描述表是一种数据结构,它包含GDI需要的所有关于显示平面情况的描述字段,包括相连的物理设备和各种各样的状态信息。 设备描述表除了可作为通往各种输出设备的桥梁之外,还封装了程序用来产生输出的GDI函数。 专门用途的设备描述表类 CPaintDC CPaintDC dc(this); // Do some drawing CPaintDC* pDC = new CPaintDC(this); // Do some drawing delete pDC; 响应WM_PAINT消息 坐标系 设备坐标系:Windows的各种不同类型的设备所使用的坐标系,属于笛卡尔坐标系。单位为像素又称设备单位。X、Y轴正方向分别是右、下。 逻辑坐标系:现实世界所使用的坐标系,属于笛卡尔坐标系。单位为公制、英制或自制单位,如毫米、英寸等,又称逻辑单位。X轴正方向是右,Y轴正方向不定,是映射模式而定。 注:当映射模式起作用时,使用的是逻辑单位。 窗口与视口 窗口:原始图形区域,从现实世界角度所看到的图形,采用逻辑坐标描述。 视口:计算机屏幕上一块显示区域,从数据世界角度而言,采用设备坐标描述。 窗口与视口 不同对象显示范围 屏幕对象 CClientDC dc(NULL); 或 CWindowDC dc(NULL); 主要设备描述表属性 GDI对象 画笔Pen——CPen 画刷Brush——CBrush 字体Font——CFont 位图Bitmap——CBitmap 调色板Palette——CPalette 区域Region——CRgn 绘图模式 调用CDC::SetROP2(set raster operation to缩写形式)设置绘图模式 调用CDC::GetROP2得到当前绘图模式 绘图模式 映射模式 设备描述表的属性 确定从逻辑坐标值到设备坐标值的转换方式 逻辑坐标值:传送给CDC输出函数的 设备坐标值:窗口中相应的像素点位置 映射模式 映射模式 GDI中一个点的大小为1/72英寸 Twip表示”一个点的二十分之一” 缺省时,映射方式为MM_TEXT,即逻辑单位等于物理单位 映射模式 左上角原点位置保持不变,即设备坐标和逻辑坐标缺省原点都为(0,0)。 SetMapMode()设置映射模式 例如:dc.SetMapMode(MM_LOMETRIC); GetMapMode()获得当前映射模式 设置范围 SetWindowExt()设置窗口范围(逻辑坐标系),以逻辑单位计算。 SetViewportExt()设置视口范围(设备坐标系),以设备单位或像素点计算。 自定义模式 MM_ISOTROPIC模式下先调用SetWindowExt() MM_ ANISOTROPIC不分次序 坐标转换 CDC::LPtoDP将逻辑坐标值转换为设备坐标值 xViewport = (xWindow - xWinOrg) * xViewExt / xWinExt + xViewOrg yViewport = (yWindow - yWinOrg) * yViewExt / yWinExt + yViewOrg CDC::DPtoLP将设备坐标值转换为逻辑坐标值 xWindow = (xViewport - xViewOrg) * xWinExt / xViewExt + xWinOrg yWindow = (yViewport - yViewOrg) * yWinExt / xViewExt + yWinOrg 移动原点 SetWindowOrg()设置窗口的原点(即逻辑坐标系原点) SetViewportOrg()设置视口的原点(即设备坐标系原点) 移动原点 将原点移到窗口中心点 办法一: CRect rect; GetClientRect(rect); dc.SetViewporOrg(rect.Width/2,rect.Height()/2); 移动原点 将原点移到窗口中心点 办法二: CRect rect; GetClientRect(rect); CPoint point(rect.Width()/2,rect.Height()/2); dc.S

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档