图形文本和位图教案.pptx
《图形文本和位图教案.pptx》由会员分享,可在线阅读,更多相关《图形文本和位图教案.pptx(83页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、图形图形(txng)文本和位图文本和位图第一页,共83页。7.1.2 坐标坐标(zubio)映映射射在讨论坐标映射之前,先来看看下列语句:pDC-Rectangle(CRect(0,0,200,200);它是在某设备环境(hunjng)中绘制出一个高为200个像素,宽也为200个像素的方块。由于默认的映射模式是MM_TEXT,其逻辑坐标(在各种映射模式下的坐标)和设备坐标(显示设备或打印设备坐标系下的坐标)相等。因此这个方块在1024 x 768的显示器上看起来要比在640 x 480的显示器上显得小一些,而且若将它打印在600dpi精度的激光打印机上,这个方块就会显得更小了。如表7.1所示。
2、表表7.1 映射映射(yngsh)模式模式第1页/共83页第二页,共83页。7.1.2 坐标坐标(zubio)映射映射 例例例例Ex_Draw Ex_Draw 通过设置窗口和视口大小来改变显示的比例通过设置窗口和视口大小来改变显示的比例通过设置窗口和视口大小来改变显示的比例通过设置窗口和视口大小来改变显示的比例(1)(1)用用用用MFC AppWizardMFC AppWizard创建一个默认创建一个默认创建一个默认创建一个默认(mrn)(mrn)的单文档应用程序的单文档应用程序的单文档应用程序的单文档应用程序Ex_DrawEx_Draw。(2)(2)在在在在CEx_DrawView:OnDr
3、awCEx_DrawView:OnDraw函数中添加下列代码:函数中添加下列代码:函数中添加下列代码:函数中添加下列代码:void CEx_DrawView:OnDraw(CDC*pDC)void CEx_DrawView:OnDraw(CDC*pDC)CEx_DrawDoc*pDoc=GetDocument();CEx_DrawDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);ASSERT_VALID(pDoc);CRect rectClient;CRect rectClient;GetClientRect(rectClient);GetClientRect
4、(rectClient);/获得当前窗口的客户区大小获得当前窗口的客户区大小获得当前窗口的客户区大小获得当前窗口的客户区大小pDC-SetMapMode(MM_ANISOTROPIC);/pDC-SetMapMode(MM_ANISOTROPIC);/设置设置设置设置MM_ANISOTROPICMM_ANISOTROPIC映射模式映射模式映射模式映射模式pDC-SetWindowExt(1000,1000);pDC-SetWindowExt(1000,1000);/设置窗口范围设置窗口范围设置窗口范围设置窗口范围pDC-SetViewportExt(rectClient.right,-rect
5、Client.bottom);pDC-SetViewportExt(rectClient.right,-rectClient.bottom);/设置视口范设置视口范设置视口范设置视口范围围围围pDC-SetViewportOrg(rectClient.right/2,rectClient.bottom/2);pDC-SetViewportOrg(rectClient.right/2,rectClient.bottom/2);/设置视口原设置视口原设置视口原设置视口原点点点点pDC-Ellipse(CRect(-500,-500,500,500);pDC-Ellipse(CRect(-500,-
6、500,500,500);第2页/共83页第三页,共83页。例例例例Ex_DrawEx_Draw(3)编译运行(ynxng),结果如图7.1所示。图7.1 改变(gibin)显示比例第3页/共83页第四页,共83页。7.1.3 CPoint、CSize和和CRect在图形绘制操作中,常常需要使用在图形绘制操作中,常常需要使用MFCMFC中的中的CPointCPoint、CSizeCSize和和CRectCRect等简单数据类由等简单数据类由于于CPoint(CPoint(点点)、CSize(CSize(大小大小(dxio)(dxio)和和CRect(CRect(矩形矩形)是对是对Windows
7、Windows的的POINTPOINT、SIZESIZE和和RECTRECT结结构的封装,因此它们可以直接使用各自结构的数据成员,如下所示:构的封装,因此它们可以直接使用各自结构的数据成员,如下所示:typedef struct tagPOINT typedef struct tagSIZE typedef struct tagPOINT typedef struct tagSIZE LONG x;LONG x;/点的点的x x坐标坐标 int cx;/int cx;/水平大小水平大小(dxio)(dxio)LONG y;LONG y;/点的点的y y坐标坐标 int cy;/int cy;/
8、垂直大小垂直大小(dxio)(dxio)POINT;POINT;SIZE;SIZE;typedef struct tagRECT typedef struct tagRECT LONG left;LONG left;/矩形左上角点的矩形左上角点的x x坐标坐标 LONG top;LONG top;/矩形左上角点的矩形左上角点的y y坐标坐标 LONG right;LONG right;/矩形右下角点的矩形右下角点的x x坐标坐标 LONG bottom;LONG bottom;/矩形右下角点的矩形右下角点的y y坐标坐标 RECT;RECT;第4页/共83页第五页,共83页。7.1.3 CPo
9、int、CSize和和CRect1.CPoint、CSize和和CRect类的构造函数类的构造函数CPoint类带参数的常用构造函数原型如下:类带参数的常用构造函数原型如下:CPoint(int initX,int initY);CPoint(POINT initPt);其中,其中,initX和和initY分别用来指定分别用来指定CPoint的的成员成员x和和y的值。的值。initPt用来指定一个用来指定一个POINT结构结构(jigu)或或CPoint对象来初始化对象来初始化CPoint的成员。的成员。CSize类带参数的常用构造函数原型如下:类带参数的常用构造函数原型如下:CSize(in
10、t initCX,int initCY);CSize(SIZE initSize);其中,其中,initCX和和initCY用来分别设置用来分别设置CSize的的cx和和cy成员。成员。initSize用来指定一个用来指定一个SIZE结构结构(jigu)或或CSize对象来初始化对象来初始化CSize的成员。的成员。CRect类带参数的常用构造函数原型如下:类带参数的常用构造函数原型如下:CRect(int l,int t,int r,int b);CRect(const RECT&srcRect);CRect(LPCRECT lpSrcRect);CRect(POINT point,SIZE
11、 size);CRect(POINT topLeft,POINT bottomRight);第5页/共83页第六页,共83页。7.1.3 CPoint、CSize和和CRect2.CRect类的常用操作类的常用操作由于一个由于一个CRect类对象包含类对象包含(bohn)用于定义矩形的左上用于定义矩形的左上角和右下角点的成员变量,因角和右下角点的成员变量,因此此在传递在传递LPRECT、LPCRECT或或RECT结构作为参数的任何地方,结构作为参数的任何地方,都可以使用都可以使用CRect对象来代替。对象来代替。CRect类的操作函数有很多,这类的操作函数有很多,这里只介绍矩形的扩大、缩小以里
12、只介绍矩形的扩大、缩小以及两个矩形的及两个矩形的“并并”和和“交交”操作,更多的常用操作操作,更多的常用操作如表如表7.2所示。所示。表表7.2 CRect类常用类常用(chn yn)的成员函数的成员函数第6页/共83页第七页,共83页。7.1.3 CPoint、CSize和和CRect2.CRect类的常用操作类的常用操作成员函数成员函数InflateRect和和DeflateRect用来扩用来扩大和缩小一个矩形。由于它们的操作是大和缩小一个矩形。由于它们的操作是相互的,也就是说,若指定相互的,也就是说,若指定InflateRect函函数的参数为负值,那么操作的结果是缩数的参数为负值,那么操
13、作的结果是缩小矩形,因此下面小矩形,因此下面(xi mian)只给出只给出InflateRect函数的原型:函数的原型:void InflateRect(int x,int y);void InflateRect(SIZE size);void InflateRect(LPCRECT lpRect);void InflateRect(int l,int t,int r,int b);其中,其中,x用来指定扩大用来指定扩大CRect左、右边的数左、右边的数值。值。y用来指定扩大用来指定扩大CRect上、下边的上、下边的数值。数值。size中的中的cx成员指定扩大左、右边的成员指定扩大左、右边的数
14、值,数值,cy指定扩大上、下边的数值。指定扩大上、下边的数值。lpRect的各个成员用来指定扩大每一边的的各个成员用来指定扩大每一边的数值。数值。l、t、r和和b分别用来指定扩大分别用来指定扩大CRect左、上、右和下边的数值。左、上、右和下边的数值。第7页/共83页第八页,共83页。7.1.3 CPoint、CSize和和CRect2.CRect类的常用操作类的常用操作成员函数成员函数IntersectRect和和UnionRect分别分别用来将两个矩形进行相交和合并,当结用来将两个矩形进行相交和合并,当结果为空时返回果为空时返回FALSE,否则返回,否则返回TRUE。它。它们们(t men
15、)的原型如下:的原型如下:BOOL IntersectRect(LPCRECT lpRect1,LPCRECT lpRect2);BOOL UnionRect(LPCRECT lpRect1,LPCRECT lpRect2);其中,其中,lpRect1和和lpRect2用来指定操作的用来指定操作的两个矩形。例如:两个矩形。例如:CRect rectOne(125,0,150,200);CRect rectTwo(0,75,350,95);CRect rectInter;rectInter.IntersectRect(rectOne,rectTwo);/结果为结果为(125,75,150,95)
16、ASSERT(rectInter=CRect(125,75,150,95);rectInter.UnionRect(rectOne,rectTwo);/结果为结果为(0,0,350,200)ASSERT(rectInter=CRect(0,0,350,200);第8页/共83页第九页,共83页。7.1.4 颜色颜色(yns)和颜和颜色色(yns)对话框对话框在在MFCMFC中,中,CDCCDC使用的是使用的是RGBRGB颜色空间,即选用红颜色空间,即选用红(R)(R)、绿、绿(G)(G)、蓝、蓝(B)(B)三种基色分量,通过三种基色分量,通过对这三种基色不同比例对这三种基色不同比例(bl)(b
17、l)的混合,可以得到不同的彩色效果。并且,的混合,可以得到不同的彩色效果。并且,MFCMFC使用使用COLORREFCOLORREF数据类型来表示一个数据类型来表示一个3232位的位的RGBRGB颜色,它也可以用下列的十六进制表示:颜色,它也可以用下列的十六进制表示:0 x00bbggrr 0 x00bbggrr 此形式的此形式的rr rr、gggg、bbbb分别表示红、绿、蓝三个颜色分量的分别表示红、绿、蓝三个颜色分量的1616进制值,最大为进制值,最大为0 xff0 xff。在具体操作。在具体操作RGBRGB颜色时,还可使用下列的宏操作:颜色时,还可使用下列的宏操作:GetBValue G
18、etBValue 获得获得3232位位RGBRGB颜色值中的蓝色分量颜色值中的蓝色分量 GetGValue GetGValue 获得获得3232位位RGBRGB颜色值中的绿色分量颜色值中的绿色分量 GetRValue GetRValue 获得获得3232位位RGBRGB颜色值中的红色分量颜色值中的红色分量 RGB RGB 将指定的将指定的R R、GG、B B分量值转换成一个分量值转换成一个3232位的位的RGBRGB颜色值。颜色值。MFCMFC的的CColorDialogCColorDialog类为应用程序提供了颜色选择通用对话框,如图类为应用程序提供了颜色选择通用对话框,如图7.27.2所示
19、。所示。图7.2 颜色(yns)对话框第9页/共83页第十页,共83页。7.1.4 颜色颜色(yns)和颜色和颜色(yns)对话框对话框CColorDialogCColorDialog类具有下列的构造函数:类具有下列的构造函数:CColorDialog(COLORREF clrInit=0,DWORD dwFlags=0,CWnd*pParentWnd=NULL);CColorDialog(COLORREF clrInit=0,DWORD dwFlags=0,CWnd*pParentWnd=NULL);其中,其中,clrInitclrInit用来指定选择的默认颜色值,若此值没指定,则为用来指定
20、选择的默认颜色值,若此值没指定,则为RGB(0,0,0)(RGB(0,0,0)(黑色黑色)。pParentWndpParentWnd用来指定对话框的父窗口指针。用来指定对话框的父窗口指针。dwFlagsdwFlags用来表示定制对话框外观和功能的系用来表示定制对话框外观和功能的系列标志参数。它可以是下列值之一或列标志参数。它可以是下列值之一或”|”|”组合:组合:CC_ANYCOLOR CC_ANYCOLOR 在基本在基本(jbn)(jbn)颜色单元中列出所有可得到的颜色颜色单元中列出所有可得到的颜色 CC_FULLOPEN CC_FULLOPEN 显示所有的颜色对话框界面。若此标志没有被设定
21、,则用户显示所有的颜色对话框界面。若此标志没有被设定,则用户单击单击“规定自定义颜色规定自定义颜色”按钮才能显示出定制颜色的界面按钮才能显示出定制颜色的界面 CC_PREVENTFULLOPEN CC_PREVENTFULLOPEN 禁用禁用“规定自定义颜色规定自定义颜色”按钮按钮 CC_SHOWHELP CC_SHOWHELP 在对话框中显示在对话框中显示“帮助帮助”按钮按钮 CC_SOLIDCOLOR CC_SOLIDCOLOR 在基本在基本(jbn)(jbn)颜色单元中只列出所得到的纯色颜色单元中只列出所得到的纯色当对话框当对话框“OK”“OK”退出退出(即即DoModalDoModal
22、返回返回 IDOK)IDOK)时,可调用下列成员获得相应的颜色。时,可调用下列成员获得相应的颜色。COLORREF GetColor()const;COLORREF GetColor()const;/返回用户选择的颜色。返回用户选择的颜色。void SetCurrentColor(COLORREF clr);void SetCurrentColor(COLORREF clr);/强制使用强制使用clrclr作为当前选择的颜色作为当前选择的颜色 static COLORREF*GetSavedCustomColors();static COLORREF*GetSavedCustomColors(
23、);/返回用户自己定义颜色返回用户自己定义颜色第10页/共83页第十一页,共83页。7.1.5 图形图形(txng)设备接口设备接口Windows为设备环境提供了各种各样的绘图工具,例如用于画线的“画笔”、填充区域的“画刷”以及(yj)用于绘制文本的“字体”。MFC封装了这些工具,并提供相应的类来作为应用程序的图形设备接口GDI,这些类有一个共同的抽象基类CGdiObject,具体如表7.3所示。表表7.3 MFC的的GDI类类第11页/共83页第十二页,共83页。7.1.5 图形设备图形设备(shbi)接口接口1.1.使用使用使用使用GDIGDI对象对象对象对象在选择在选择在选择在选择GDI
24、GDI对象进行绘图时,往往遵循着下列的步骤:对象进行绘图时,往往遵循着下列的步骤:对象进行绘图时,往往遵循着下列的步骤:对象进行绘图时,往往遵循着下列的步骤:(1)(1)在堆栈中定义一个在堆栈中定义一个在堆栈中定义一个在堆栈中定义一个GDIGDI对象对象对象对象(如如如如CPenCPen、CBrushCBrush对象对象对象对象),然后用相应的函数,然后用相应的函数,然后用相应的函数,然后用相应的函数(如如如如CreatePenCreatePen、CreateSolidBrush)CreateSolidBrush)创建此创建此创建此创建此GDIGDI对象。但要注意:有些对象。但要注意:有些对象
25、。但要注意:有些对象。但要注意:有些GDIGDI派生类的构造函数允许用户提供派生类的构造函数允许用户提供派生类的构造函数允许用户提供派生类的构造函数允许用户提供足够的信息,从而足够的信息,从而足够的信息,从而足够的信息,从而(cng r)(cng r)一步即可完成对象的创建任务,这些类有一步即可完成对象的创建任务,这些类有一步即可完成对象的创建任务,这些类有一步即可完成对象的创建任务,这些类有CPenCPen、CBrushCBrush。(2)(2)将构造的将构造的将构造的将构造的GDIGDI对象选入当前设备环境中,但不要忘记将原来的对象选入当前设备环境中,但不要忘记将原来的对象选入当前设备环境
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形 文本 位图 教案
限制150内