




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,(2) 与MFC图形操作有关 的类及主要函数,2,. 绘图类 1绘图类CDC (设备环境类, Cobject的子类) CDC类提供了对设备描述表进行操作的成员函数以及对窗 口有关描述表进行操作的成员函数。 用提供的函数对设备描述表进行操作,绘图工具的使用, 图形界面的选择、颜色及调色板的操作。 取得绘图的属性、映射方式、视口及窗口的操作、坐标转 换等。 CDC的子类:,3,CDC,CPaintDC,CClientDC,CWindowDC,CMetaFileDC,CPreviewDC,Cobject,打印预览输出类,响应消息完成客户区绘图,设备描述表,提供一个设备环境,封装绘图方法.,4,CDC的派生类: CpaintDC类 一般用在函数OnPaint( )内,响应WM_PAINT的消息。 windows的消息循环机制一直在采集各种消息,当接到WM PAINT消息时,自动调用固定的绘图函数,使用CpaintDC类对象的成员函数,完成客户区绘图。 (BeginPaint, EndPaint实现句柄建立与释放) CClientDC类 窗口客户设备描述表,对窗口客户区的图形访问。 (GetDC, ReleaseDC实现句柄建立与释放) CwindowDC类 提供一个设备环境、以便成员函数在包括非客户区在内的 整个屏幕区的绘图。(GetwindowDC, ReleaseDC建立与释放),5,CMetaFileDC类 封装Windows图元文件中的绘图方法. 构造对象, 调用Create函数, 绘图: MoveTo, LineTo, ,Close, 返回句柄.(CreateEnhanced, CloseEnhanced建立与释放) 2绘图类的主要差别 CwindowDC类与CpaintDC 和CClientDC类的区别 CwindowDC可以在非客户(窗口)绘制图形。坐标是全屏幕。 CpaintDC和CClientDC只能在客户区绘制图形。坐标原点是 客户区的左上角。 CpaintDC类与CClientDC类的区别 都可在客户内作图,区别是CpaintDC类应用在OnPaint函数 中,以响应windows的WM_PAINT消息,自动实现作图。 CClientDC类可以实现实时绘图。,6,CClientDC,CWindowDC,7,3绘图类的引用方法 CDC类 CDC类不能用窗口对象指针初始化对象,一般不声明对象直 接应用。常用于建立内存设备描述对象。 OnDraw( CDC *pDC) CpaintDC类 CpaintDC dc(this); 定义一个CpaintDC的对象dc,并用当前窗口对象指针this对 对象dc进行初始化。 CClientDC类 CClientDC dc(this); 定义一个CClientDC的对象dc,并用当前窗口对象指针this对对象dc进行初始化。,8, CwindowDC类 CwindowDC dc(this); 定义一个CwindowDC类的对象dc,并用当前窗口对象 指针this对dc进行初始化。 4. CDC 的部分函数 绘图对象的函数 SetObject( ) 颜色调色板函数 SelectPalette( ) 绘图属性函数 SetBkColor( ) 映射函数 SetMapMode( ) 绘制线条函数 LineTo( ) 置笔位置函数 MoveTo( ) 圆狐函数 Arc( ) 文本颜色函数 SetTextColor( ),9,.CView类 类结构 Cobject CCmdtarget CWnd CView Cview 的成员函数 Cview( ) 创建新窗口时, 初始化 OnDraw( ) 屏幕显示,打印预览 Getdocument( ) 得到文档指针,调成员函数 OnUpdate( ) 视类文档数据修改后调用 OnPrint( ) 打印和打印预览时调用,为消息服务类,窗口处理类,10, void CMyView:OnDraw( CDC *pDC ) CClientDC dc(this); dc.TextOut(100, 100, “成都理工大学图形输出“); . 绘图类的主要操作功能 1坐标映射方式 Windows映像方式 指 Windows下的逻辑坐标,实际的物理屏幕是由像素组成 的,640480表示物理屏幕的高、宽像素目。,11,映像方式 映像识别码 逻辑单位 x和y正向 MM_TEXT 1 Pixels(象素) 右下 MM_LOMETRIC 2 0.1mm 右上 MM_HIMETRIC 3 0.01mm 右上 MM_LONGLISH 4 0.1inch 右上 MM_HIENGLISH 5 0.01inch 右上 MM_TWIPS 6 1/1440inch 右上 MM_ISOTROPIC 7 Variable(x = y) 变化 MM_ANISOTROPIC 8 Variable(x y) 变化 坐标原点都处于左上角,最后一个映像方式的逻辑单位x 与y不同。,12,设置映像方式的方法 调用CDC类的函数SetMapMode完成。 CDrawView : OnDraw (CDC * PDC) PDCSetMapMode(n); 其中n是映像识别码。 逻辑坐标与设备坐标的转换 DPtoLP(LPPOINT lpPoints); 设备坐标转逻辑坐标。 LPtoDP(LPPOINT lpPoints); 逻辑坐标转设备坐标。 例如坐标转换函数的应用 Cpoint point; 定义一个点 point.x=100; 赋值 point.y=100; PDCDPtoLP( 将点从设备坐标转逻辑坐标。,13,2窗口视口及有关函数 窗口视口: Windows绘图时,并不是把图形直接绘制到屏幕上,而是 以各种映像方式下的逻辑坐标系将图形绘制到虚拟窗口中, 然后将这个图形映像到一个视图中。 窗口: 虚拟的屏幕 视口: 实际的视图,14,窗口和视口函数: SetWindowOrg 功能: 设置一个与设备环境有关的窗口原点。 Cpoint SetWindowOrg (int x, int y); Cpoint SetWindowOrg (POINT point); x,y是新的窗口原点,POINT也确定窗口原点。 函数返回一个前窗口的原点。 SetViewportOrg 功能: 设置一个与设备环境有关的视口原点。 Cpoint SetViewportOrg (int x, int y); Cpoint SetViewportOrg (POINT point); x,y是新视口原点,POINT也确定视口原点。 函数返回一个前视口的原点。,15,SetWindowExt 功能:设置与设备环境有关的窗口在x,y方向的幅度(范围)。 virtual CSize SetWindowExt (int cx, int cy); virtual CSize SetWindowExt (SIZE size); x,y方向的幅度cx, cy, 或size。 函数返回前幅度值。 SetViewportExt 功能:设置与设备环境有关的视口在x,y方向的幅度。 Virtual CSize SetViewExt (int cx, int cy); Virtual CSize SetViewExt (SIZE size); cx, cy是x与y方向的幅度,或size返回视口前幅度。,16,设置窗口、视口原点坐标: PDCSetWindowOrg(a1, b1); PDCSetViewprotOrg(a2, b2); 窗口逻辑坐标a1,b1映射到视口坐标a2,b2,得同一个点的逻辑坐标与设备坐标的对应关系。设窗口坐标x1,y1,设备坐标x2,y2, 据到原点距离相等,可得(y轴同向时): (x1-a1)=(x2-a2)*n (y1-b1)=(y2-b2)*n 其中n是幅度比值。,17,所以当窗口、视口的原点坐标与n都已知时,可得窗口坐标 与视口坐标对应关系。 PDCSetMapMode(MM_ANISOTROPIC); PDCSetWindowExt(100, 100); 其中x1,y1是幅度 PDCSetViewportExt(500, 300); 其中x2,y2是幅度 设窗口、视口原点(0, 0), x2:x1=5, y2:y1=3, 在窗口画一个圆心在(50, 50),r=20的圆,映像到视口是一个椭圆。,7 x=y,18,(250,150),(50,50),20,100,60,1:5,1:3,20,窗口,视口,19,void CMYView:OnDraw(CDC *pDC) pDC-SetMapMode(2); 0.1mm/(象素) pDC-SetViewportOrg(Cpoint(100,100); pDC-Rectangle(Crect(0,0,200,200); ,(0,0),x,y,y,x,(0,0),(100,100),(200,200) (300,300),2cm,20,. 常用绘图函数 1置背景色 默认时背景色是白色。 Virtual COLORREF SetBkColor (COLORREF crcolor); crcolor 是新的背景色 SetBkColor(hdc, RGB( 0, 255, 0); 2置背景模式 int SetBkMode (int nBkMode); PDCSetBkMode (TRANSPARENT); 不改变背景色, OPAQUE时用当前背景色。 在SetBkcolor函数后用。,21,3取得当前背景色 COLORREF GetBkColor ( ); COLORREF color=PDCGetBkColor( ); 取得当前背景色存color中。 4取得当前背景模式 int GetBkMode( ); int nBkMode=PDCGetBkMode( ); 5置像素 COLORREF SetPixel (int x, int y, COLORREF crcolor); COLORREF SetPixel (POINT point, COLORREF crcolor); x, y, 或point是像素点坐标,crcolor颜色。,22,6置当前位置 置画线的起始位置。 Cpoint MoveTo (int x, int y); Cpoint MoveTo (POINT point); 7画简单直线 BOOL LineTo (int x, int y); BOOL LineTo ( POINT point); (ok 非0) 用当前选择的画笔从当前位置到参数 x, y画一条直线。 8画弧 BOOL Arc (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); BOOL ArcTo (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); (改变当前位置) 以矩形定义弧的大小,边界矩形隐藏。,23,9矩形 BOOL Rectangle (int x1, int y1, int x2, int y2); 左上角与右下角坐标。 10圆角矩形 BOOL RoundRect (int x1, int y1, int x2, int y2, int x3, int y3); 其中x3, y3是圆角矩形的宽度与高度。 11椭圆和圆 BOOL Ellipse (int x1, int y1, int x2, int y2); 由坐标确定椭圆与圆,并用当前画刷充填。,24,12饼图 BOOL Pic (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); 不充填。 13多边形 BOOL polygon (LPPOINT lppoints, int nCount); 数组 顶点数 14其它绘图函数 floodFill 用当前画刷填充一个区域 DrawIcon 在设备文本对象指定的设备上画一个图标。 FillRect 用指定画刷填充一个矩形区域但不画边线 FrameRect 用指定画刷画一个矩形边框,不充填 InverRect 对矩形区反转色。,25,. 画笔与画刷 (GDI对象中的绘图),CGdiO bject,CBitmap,CBrush,CFont,CPalette,CPen,CRgn,26,1. 画笔的使用 构造一支画笔 Cpen( ); Cpen(int nPenStyle, int nWidth, COLORREF crColor); 风格 宽度 颜色 Cpen pen1(PS_SOLID, 10, RGB(255,0,0); 选入画笔 Cpen *selectObject(Cpen *pPen); Cpen *poldPen=pDc-Seclectobject(,函数原形,27,2. 画刷的使用 构造一支画刷: CBrush( ); CBrush( COLORREF crColor); CBrush(int nIndex, COLORREF crColor); 风格 HS_VERTICAL 垂直阴影线 HS_HORIZONTAL 水平阴影线 选入画刷: CBrush *Brush; Brush= NewBrush(RGB(255,0,0); CBrush *poldBrush=pDc-SelectObject(Brush);,28,3. 在绘图过程中使用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025河南郑州海康威视郑州招聘考前自测高频考点模拟试题附答案详解(突破训练)
- 2025年临沂兰山区教育和体育局部分事业单位公开招聘教师(55名)模拟试卷附答案详解(黄金题型)
- 世界著名渔人码头案例分析
- 2025私营单位合作协议范本
- 碱液灼烫安全培训课件
- 建立合作关系协议
- 2025股权转让合同签订破产企业收购协议
- 接口与协议书
- 装修邻居赔偿协议书
- 家庭分家协议书
- 音乐节舞台搭建及拆除施工方案
- 2025年江苏省农业融资担保有限责任公司招聘笔试参考题库附带答案详解
- 《慢性硬膜下血肿》课件
- PRP治疗注意事项
- 2025年泰和县工投建设集团有限公司及子公司招聘笔试参考题库含答案解析
- 企业事业部制信息化与数字化转型
- GB 5009.229-2025食品安全国家标准食品中酸价的测定
- 高支模工程监理细则
- 环氧乙烷应急救援预案
- 2024-2025学年高中数学 第三章 函数的概念与性质 3.1.1 函数的概念教学设计 新人教A版必修第一册
- 2025-2030酒吧行业市场发展分析及投资前景研究报告
评论
0/150
提交评论