第5章 图形和文本输出.

Slides:



Advertisements
Similar presentations
2 、 5 倍数的特征 学习目标 1. 掌握 2 、 5 倍数的特征,能判 断一个数是否是 2 、 5 的倍数。 2. 理解奇数和偶数的意义,正 确判断一个数是奇数还是偶数。
Advertisements

中外领导力 的 跨文化 比较分析 主讲人:. 壹 领导力理论 中国古代 “ 修身、齐家、治国、平天下 ” —— 孔子(儒家思想 ) 庄子(道家学派) 老子(道家学派)
窮人與富人的決定性差異 書名: 窮人與富人的距離 0.05mm 作者:張禮文出版社:海鴿. 窮人與富人的決定性差異 窮人和富人的關鍵差異不在口袋金錢的多寡,而 在腦袋。這本書將全面解開窮人之所以貧窮,而 富人之所以富裕的所有奧秘。 窮人和富人的關鍵差異不在口袋金錢的多寡,而 在腦袋。這本書將全面解開窮人之所以貧窮,而.
我的未来不是梦 攀枝花市经贸旅游学校. 1. 文中案例王萍苦恼的原因是 什么? 2. 你有哪些办法可以帮助王萍? 导入 思考  谁来帮帮她?
一、研究背景 植物组培育细胞培养源于 19 世纪后半 叶,当时植物细胞全能性的概念还没有 完全确定。人们便对此进行研究。 目前,植物组培已经变成了一种常规 的技术,广泛应用于植物的脱毒,快繁 ,基因工程,一串研究,次生代谢物质 生产,工厂化育苗等多方面。
大学生入党积极分子培训教材 主编:蔡中华 曹培强.
职业指导服务系统 欢迎了解职业指导服务系统!
社会组织培训专题 社会组织常用票据知识解读 张建山.
壹、教學檔案介紹(前菜) 貳、教學檔案平台介紹(主菜) 參、檔案目錄範例及小叮嚀(甜點)
第13章 土壤.
综合实验 ----实验选作(1/3) 智能五子棋游戏 1. 实验目的
第2章 给水排水管网 工程规划 土木工程学院 刘宇红.
简 介 简 介 庞各庄镇中心卫生院始建于1956年,占地11.5亩,总建筑面积4500平方米。下辖1个综合门诊部,8个社区卫生服务站。门诊部占地8.5亩,总建筑面积1500平方米;8个社区卫生服务站总建筑面积2000余平方米,平均占地1.2亩建筑面积210平方米。 我院现有职工134人,实有病床50张,主要为全镇53个自然村的4.2万人口和外来流动人口1.5万人提供预防、保健、医疗、健教、康复、计划生育等项服务。
首都卫生发展科研专项 2014年申请指南解读 2013年9月17日.
第九章 2D遊戲演算法 課前指引 本章中將介紹在遊戲開發過程中,常會運用到一些貼圖技巧,來展現遊戲畫面及動態效果。例如基本貼圖、動畫貼圖、橫向捲軸移動、前景背景移動等,來提高單純2D圖片的變化性。
提高自身素质做好 新时期班主任工作 北京市广渠门中学 高金英.
動畫與遊戲設計 2D Game 程于芳 老師
安徽省交通集团安庆汽运有限公司 青年员工培训班.
普通话模拟测试 与学习平台 使用指南.
过程性保存文本格式的实现 计算概论小课题 王元康.
第九章日治時期的台灣(下).
動畫與遊戲設計 遊戲開發工具 程于芳 老師
企业税收筹划与税务风险管理 暨南大学财税系 沈肇章.
網路小說劇情建構與伏線營造 Windows98.
项目:贪吃蛇游戏设计 工作任务一:系统设计(system design) 工作任务二:豆类(Bean)设计
三重有情、修德有愛 2003/12/24.
突然好想你们···· 11广告1班—黄丹丹.
实验设计中的因变量检测 乐清中学 霍晓珍.
水土保持工程施工階段監造管理之探討 授課老師:林俐玲 教授 指導老師:陳文福 教授 報告人: 顏廣智 學 號:
关于整合检验检测认证机构实施意见的通知(国办发〔2014〕8号)
学校幼托机构春季 传染病防控 镇海区CDC 吴永.
推进德育创新 做好新时期班主任工作 北京市广渠门中学 高金英.
基于VC++的数字图像特效处理系统的设计与实现
公 园 大 道 ——公园链住宅社区 组员:张亚辉 程桂华 黄传东.
依氣候條件所區分的成土作用 作用 說明 鐵鋁化
游子心 中华情 美国大华府地区华人华侨 庆祝中国六十周年华诞.
C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系.
项目五 窗体上绘图 任务列表: 1、在窗体上绘制各种基本图形 2、在窗体上绘制文本.
Windows 程式設計 (使用 C++ / C#)
Visual C++ Windows Programming
第5章 文本与字体 2018/12/3 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2018/12/3 Huang Weitong.
简要回顾 了解课程体系、课程目的和主要内容 掌握Windows编程涉及的一些主要概念 DOS程序和Windows程序的主要区别 窗口和程序
第1章 Windows应用程序框架的 创建与消息处理
第十一讲 MFC常用控件的使用(3) 严宣辉 数学与计算机科学学院
VC++开发实例 张荣梅 2007年2月.
Windows Form绘图类及其简介.
第4章 MFC编程 4.1 MFC概述 4.2 MFC和Win CObject类 4.4 消息映射的实现
第 10 章 Windows用户界面 10.1 Windows消息与命令 10.2 单文档与多文档程序 10.3 对话框与常用组件
计算机图形学实验 用VC++在屏幕上绘图.
第7章图形、文本和位图 7.1概述 7.2图形设备接口 7.3图形绘制 7.4字体与文字处理 7.5在对话框及控件中绘图 7.6综合应用.
疾病预防控制绩效考核管理软件 开发思路 & 使用说明
Visual C++ Windows Programming
類別 特性 計量 (1)測量時可讀出工件之正確尺寸 (2)多用於小量生產的產品,量測與檢驗尺寸是否合乎標準。
第十三章 繪 圖 13-1 繪圖方法 13-2 繪圖屬性 13-3 綜合範例.
第八章 文档/视图结构应用程序 8.1 文档/视图结构 8.2 图形与文字输出 8.3 定时器 8.4 鼠标和键盘消息处理 8.5 对话框
第十五讲 MFC与消息处理 MFC简介 Windows编程机制 MFC应用程序框架原理 创建应用程序框架 消息及其分类 消息映射机制
版权所有 复制必究 第 6 章 MFC原理与方法.
VISUAL C++ 编程中的图形 图形设备接口(Graphic device interface)
塑膠模具設計 與 制造基礎知識 何秀定 2006/05/20.
第十二讲 菜单、工具栏和状态栏 严宣辉 数学与计算机科学学院
《面向对象程序设计与Visual C++6.0教程》
Visual C++ Windows Programming
MFC及其应用.
2012慈濟大學18週年校慶運動會 裁判研習 體育教學中心 張木山 教授.
第5章 文本与字体 2019/4/25 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2019/4/25 Huang Weitong.
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
中国农业科学院博士后学术论坛 博士后基金申请的经验及体会 中国农业科学院生物技术研究所 秦 华 博士
OpenGL 基础 计算机科学与技术系.
第二章 一个简单的二维光栅图形软件包 ----Windows API简介
实训7:屈光检查 天津职业大学眼视光工程学院 王海英.
Presentation transcript:

第5章 图形和文本输出

第5章 图形和文本输出 图形设备接口(GDI) CGdiObject对象 CDC 文本处理 绘图处理

图形设备接口 GDI(graphics device interface) 1.矢量图形 指画线和填充图形,包括点、直线、曲线、多边形、矩形等。 2.光栅图形 指光栅图形函数对以位图形式存储的数据进行操作,包括各种位图和图标的输出,在屏幕上表现为对若干行和列的像素操作。

图形设备接口 GDI(graphics device interface) 3.文本输出 是GDI的另一项任务,输出文本时对输出位置的计算不是以行为单位,而是以逻辑坐标为单位计算,用户可以设置文本的各种效果,如加粗、斜体、设置颜色等。 MFC处理图形输出类: 设备上下文CDC类 图形对象CGdiObject类

5.1.2 绘图工具GDI对象GdiObject CGdiObject是一个抽象类,该类不能直接定义对象。必须使用它的派生类

5.1.2 绘图工具GDI对象GdiObject GdiObject类是MFC提供绘图工具类。 各个派生类的任务如下: 1. 画笔(CPen) 封装GDI画笔,用于绘制对象的边框以及直线和曲线 2. 画刷(CBrush) 封装GDI画刷,用来填充一个封闭图形对象(如矩形、圆形)的内部区域。

5.1.2 绘图工具GDI对象GdiObject 3. 字体(CFont) 封装GDI字体,用户可以建立一种GDI字体,并使CFont的成员函数来访问它,主要用于设置文本输出的效果,字体大小、加粗、斜体、下划线等。 4. 位图(CBitmap) 提供成员函数装载和位图操作,位图可用于填充区域。

5.1.2 绘图工具GDI对象GdiObject 5.调色板(CPalette) 包含系统可用的色彩信息,是应用程序和彩色输出设备上下文的接口。 6. 区域(CRgn) 区域时窗口内的一块多边形或椭圆形区域。 CRgn类用于设备上下文内的区域操作。

5.1.3设备上下文DC device context DC是由GDI创建、用来代表设备连接的数据结构 DC主要功能: 1.允许应用程序使用一个输出设备 2.提供窗口应用程序,设备驱动,和输出设备之间的连接 3.保存当前信息,例如在一个窗口内绘图使用的颜色,画笔的宽度、画刷的类型等等 4.保存窗口剪取区域(clipping region),限制程序输出到输出设备中窗口覆盖的区域

设备上下文类-CDC CObject CDC CClientDC CMetaFileDC CPanitDC CWindowDC

设备上下文类-CDC MFC封装了DC,提供CDC类及它的子类以访问GDI。 各类操作如下: 1.CDC类

设备上下文类-CDC 2.CClientDC类 又名客户区设备上下文,用于客户区的输出,一般在响应非窗口消息并对客户区绘图时用到该类,例如:双击鼠标时输出文本等。 3.CpaintDC类 用于响应窗口重绘消息(WM_PAINT)的绘图输出,不仅可对客户区进行操作,还可对非客户区操作。

OnDraw函数 当用AppWizard创建单文档或多文档应用程序时,视图类包含成员函数OnDraw( )函数,CDC对象指针被传递给OnDraw( )函数。

OnDraw函数 void CMyView::OnDraw(CDC* pDC) { CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here pDC->TextOut(1,1,”hello world!”); }

WM_PAINT消息 WM_PAINT消息是最重要的绘图消息,它要求窗口重新绘制内容,产生WM_PAINT消息的场合通常有: 窗口移动后及最大化,最小化后的刷新。 被覆盖区域的刷新,如下拉菜单覆盖的区域。 无效区域产生后的刷新,如执行滚动条操作,将一区域移动至不可见。

获取设备上下文 (DC) 绘图前必须准备好设备上下文(DC),获取设备上下文 的方法: 1.接受一个参数为指向CDC对象的指针 void CMyView::OnDraw(CDC* pDC); 2.构造CClientDC对象 CClientDC dc(this);

接受一个参数为指向CDC对象的指针 void CMyView::OnDraw(CDC* pDC) { CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here //在坐标为10,10的位置上画一点,颜色黑色 pDC->SetPixel(CPoint(10,10),RGB(0,0,0)); } 参数为指向CDC对象的指针

构造CClientDC对象 { CClientDC dc(this); //this 指针将CMyView赋值给创建的dc对象 Void CMyView::OnLButtonDown(UNIT nFlags,CPoint point) { CClientDC dc(this); //this 指针将CMyView赋值给创建的dc对象 dc.SetPixel(point,RGB(255,0,0)); CView:: OnLButtonDown( nFlags,point); } 构造CClientDC对象

编程实例 例5-1 编写一个单文档MFC程序Exam5_1,在视图类增加成员变量,追踪鼠标左键双击位置的最新坐标,并输出坐标信息。

5.2 处理文本 设置文本颜色 设置文本显示属性 设置字体 格式化文本 文本输出函数

设置文本颜色 Windows操作系统中采用32位表示颜色,MFC和SDK采用COLORREF数据结构表示颜色,采用8位二进制数(0~255)分别表示红、蓝、绿3色 RGB宏是定义颜色最简单的方法,用3个参数,用0~255的值来表示颜色。

设置文本颜色 设置文本前景像素使用的颜色 COLORREF SetTextColor(COLORREF crColor); 设置文本背景像素使用的颜色 COLORREF SetBkColor(COLORREF crColor);

void CMyView::OnDraw(CDC* pDC) { CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDC->SetTextColor(RGB(255,0,0)); pDC->SetBkColor(RGB(0,0,0)); CString str; str.Format("鼠标左键双击的位置是[%d,%d]",      m_LPoint.x, m_LPoint.y); pDC->TextOut(0,0,str); }

设置字体 (Set Font) 设置显示字体的风格需要创建一个CFont对象,步骤如下: 1.定义CFont对象 2.调用CreateFont函数创建字体 3.将创建的字体对象选入DC,并保存前一个被选入DC的字体对象 程序举例Exam4:在视图中创建并使用字体,显示“倾斜的黑体”内容。

void CMyView::OnDraw(CDC* pDC) { CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CFont NewFont; NewFont.CreateFont (65,65,0,0,FW_DONTCARE, true,false,false,DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, "黑体"); CFont *pOldFont; pOldFont=pDC->SelectObject (&NewFont); pDC->TextOut(10,10,"字体效果"); }

格式化文本 文本测量函数 程序举例Exam5:在视图中输出使用两种颜色的一行文本 Hello Visual C++。 确定后继文本坐标:GetTextExtent()函 功能:获取字符串高度和宽度 程序举例Exam5:在视图中输出使用两种颜色的一行文本 Hello Visual C++。

文本输出函数 函数 说明 TextOut 在屏幕的固定位置用当前设定的颜色、字体、对齐方式输出文本 TabbedTextOut DrawText 在一个区域中显示并格式化文本 ExtTextOut 与TextOut的功能相似,但可以使用该函数删去超出矩形的正文,用正文背景填充矩形,调整字符间隔。

文本输出编程实例 例5-2 阅读单文档MFC(EXE)程序EXAM5_2中处理文本显示的OnDraw函数。请分析每一行的文本串作了哪些文本属性设置、格式设置和字体设置。

5.3 处理绘图 简单的图形输出 库存对象 设置绘图坐标系 创建和使用自定义画笔和画刷

5.3.1 简单的图形输出 CDC提供了基本的绘图操作函数,介绍如下: 1.画点 pDC->SetPixel(CPoint(200,200),RGB(255,0,0)); 在[200,200]的位置画一个红点 2.画线 pDC->MoveTo(0,0); //在视图的左上角一个X pDC->LineTo (100,100); pDC->MoveTo (0,100); pDC->LineTo (100,0);

3.画矩形 CRect rect(0,0,100,100); //画一个长100、宽100的矩形 pDC->Rectangle(&rect); 4.画圆和椭圆 CRect rect(0,0,100,100);//在矩形内画圆 pDC->Ellipse(&rect); CRect rect(0,0,50,100);//在矩形内画椭圆

5.画多边形 CPoint poly[4];//画一个平行四边形 poly[0]=CPoint(0,0); poly[1]=CPoint(50,50); poly[2]=CPoint(50,100); poly[3]=CPoint(0,50); pDC->Polygon(poly,4);

6.画其它图形 CDC::Pie 画饼图 CDC::Chord 画弦 CDC::FillRect 用指定颜色填充矩形且不画边线 CDC::Draw3DRect 用于绘制名种3D边框 CDC::RoundRect 画圆角矩形

5.3.2 库存对象 库存对象是由操作系统维护的用于绘制屏幕的常用对象 包括库存画笔,画刷,字体等 使用SelectStockObject可以方便直接选择库存对象,修改系统默认值 程序举例Exam6:在视图中选用画笔和画刷库存对象来画图

程序清单5-12 void CExam5View::OnDraw(CDC* pDC) { CExam5Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rect; rect.SetRect (CPoint(0,0),CPoint(200,200)); pDC->SelectStockObject (WHITE_PEN); //选用白色画笔 pDC->SelectStockObject (GRAY_BRUSH);//选用灰色画刷 pDC->Rectangle (rect); pDC->MoveTo(0,0); pDC->LineTo (200,200); pDC->MoveTo (0,200); pDC->LineTo (200,0); }

5.3.3 设置绘图坐标系 如果要把一幅大小为400mm×800mm的图画在500像素×200像素的windows窗口中,我们把前者称为逻辑坐标,后者称为设备坐标。 原点 逻辑坐标 设备坐标 400mm 800mm 500像素 200像素 像素、厘米、毫米、英寸…

5.3.3 设置绘图坐标系 设备坐标系的原点总是在窗口的左上角,单位是像素。 逻辑坐标系的单位有多种,像素、厘米、毫米、英寸等。 逻辑坐标按映像模式分为三大类

映像模式 1.MM_TEXT 2.固定比例的映射模式 3.可变比例的映射模式 默认的映像模式,原点在左上角,向右x增加,向下y增加 允许改变比例因子和原点。在用户改变窗口大小时,绘制的内容会随之改变。如果改变一个轴的比例,则所绘的图像也会在其它轴上相应的改变。

修改映射模式 CClientDC dc; int OldMode=dc.SetMapMode(MM_LOMETRIC);

移动逻辑坐标系的原点 CRect rect; GetClientRect(rect); pDC->SetViewportOrg(rect.width()/2,rect.height()/2);

使用逻辑坐标和设备坐标的场合 MFC的CDC绘图函数都使用逻辑坐标为参数 CWnd的成员函数一般使用设备坐标为参数 返回鼠标位置作为屏幕位置测试时,一般使用设备坐标

设备坐标系统分类 1.工作区(Viewport)坐标系统 以窗口客户区左上角为原点(0,0),主要用于窗口客户区内的绘图输出以及处理窗口的一些消息。 2.窗口(Windows)坐标系统 以窗口左上角为原点(0,0),包含窗口控制菜单、标题栏等。 3.屏幕(Screen)坐标系统 以屏幕左上角为原点(0,0),当以CreateDC( )或GetDC( )函数创建或取得设备上下文用此坐标

设备坐标系统分类 MFC使用ClientToScreen和ScreenToClient两个函数,用于完成工作区坐标和屏幕坐标之间的转换工作。 CDC也提供了成员函数LPToDP和DPToLP完成两种坐标之间的转换。

创建自定义画笔 创建CPen的方法有两种: 1.定义时直接创建 CPen Mypen(PS_SOLID,2,RGB(255,0,0)); 2.定义CPen对象,再调用CreatePen( )函数 CPen pen; pen.Create(PS_SOLD, 2, RGB(255,0,0)) ;

创建自定义画刷 创建画刷有几种方法如下: 1.创建实心画刷 CBrush bs; bs.CreateSolidBrush(RGB(255,0,0)); //创建一个红色的实心画刷 2.创建阴影画刷 bs.CreateHatchBrush (HS_CROSS,RGB(255,0,0)); //创建一个十字线阴影的红色画刷

3.创建位图画刷(CreatePatternBrush) CBitMap bmp; bmp.LoadBitMap(IDB_MYBITMAP) CBrush bs bs.CreatePatternBrush(&bmp);

图形输出编程实例 例5-3使用和创建画笔和画刷。首先通过使用创建的蓝色,宽度为5的画笔画一个图形的边界,然后用当前的刷子填充这个图形来创建一个填充图形。共有三个填充图形:第一个是用深蓝色实心画刷填充的带圆角的矩形,第二个是用亮灰画刷填充的饼图,第三个是用阴影风格的画刷填充的椭圆。