资源预览内容
第1页 / 共47页
第2页 / 共47页
第3页 / 共47页
第4页 / 共47页
第5页 / 共47页
第6页 / 共47页
第7页 / 共47页
第8页 / 共47页
第9页 / 共47页
第10页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
图形与图像编程基础图形设备接口画笔与画刷本章主要学习内容:本章主要学习内容:图形处理的基本原理:图形设备接口图形设备接口设备环境设备环境GDIGDI坐标系坐标系映射模式映射模式使用画笔和画刷绘制图形文本与字体位图、图标和光标图形设备接口画笔与画刷6.3 绘制基本图形WindowsWindows中的基本图形包括点、直线、圆、圆中的基本图形包括点、直线、圆、圆弧、矩形、椭圆等。弧、矩形、椭圆等。MFCMFC把绘制这些图形的函数把绘制这些图形的函数封装在封装在CDCCDC类中。类中。绘图通常编写绘图通常编写C*ViewC*View类的类的OnDraw(CDC *pDC)OnDraw(CDC *pDC)函数,其中参数函数,其中参数pDCpDC指当前设备环境指针。指当前设备环境指针。图形设备接口画笔与画刷补充:橡皮筋技术(利用SetROP2函数)先了解SetROP2函数的两个参数R2_NOT与R2_NOTXORPEN的使用效果,以下为该两种绘画模式举例:R2_NOTXORPEN绘画模式你用红色画笔在黑色背景上画一条直线,显示红色,但你再用这只笔在刚画的直线上重画一遍,就相当于把开始画的红线擦除掉了,划线的地方显示为背景色。R2_NOT绘画模式同样有在同一个地方画两次相当于什么都没画的功能,不过R2_NOT绘画模式第一次画的时候显示颜色并不是你选定的画笔颜色,而是默认的颜色。图形设备接口画笔与画刷颜色一个彩色象素的显示需要颜色空间的支持,常一个彩色象素的显示需要颜色空间的支持,常用的颜色空间有用的颜色空间有RGB。RGB颜色空间选用红颜色空间选用红(R)、绿绿(G)、蓝、蓝(B)三种基色分量,通过对这三种基色不三种基色分量,通过对这三种基色不同比例的混合,可以得到不同的彩色效果同比例的混合,可以得到不同的彩色效果。在在MFC中,中,CDC使用的是使用的是RGB颜色空间,其中,颜色空间,其中,COLORREF是用来表示是用来表示RGB颜色的一个颜色的一个32位的数位的数据类型。据类型。它可以用下列的十六进制表示一个它可以用下列的十六进制表示一个RGB值:值:0x00bbggrr,其中,其中bb、gg、rr分别表示蓝、绿、分别表示蓝、绿、红红3个颜色分量的十六进制值。个颜色分量的十六进制值。图形设备接口画笔与画刷颜色在具体操作在具体操作RGB颜色时,可使用下列的宏操作:颜色时,可使用下列的宏操作:GetBValue、GetGValue、GetRValue来获得其来获得其中各个颜色分量值。中各个颜色分量值。如:如:int nRed=GetBValue(color);RGB可以将指定的三个分量值转换成一个可以将指定的三个分量值转换成一个32位的位的RGB颜色值。颜色值。如:如:COLORREF color=RGB(nRed,nGreen,nBlue);图形设备接口画笔与画刷颜色和颜色对话框MFC的的CColorDialog类为应用程序提供了颜色选择类为应用程序提供了颜色选择通用对话框,构造函数如下:通用对话框,构造函数如下:CColorDialog(COLORREF clrInit=0,DWORD dwFlags=0,CWnd * pParentWnd=NULL);其中,其中,clrInit指定选择的默认颜色值,默认为指定选择的默认颜色值,默认为RGB(0,0,0)黑色。黑色。pParentWnd指定对话框的父窗口指定对话框的父窗口指针。指针。dwFlags指定对话框外观和功能指定对话框外观和功能(见教材见教材P209)。当对话框单击当对话框单击OK退出时,可调用下列成员函数获得相退出时,可调用下列成员函数获得相应的颜色。应的颜色。COLORREF GetColor() const;void SetCurrentColor(COLORREF clr);static COLORREF * GetSavedCustomColors()图形设备接口画笔与画刷输出文本与画点/设置文本的前景色设置文本的前景色pDC-SetTextColor(RGB(255,0,255);pDC-SetTextColor(RGB(255,0,255); /输出文本输出文本pDC-TextOut(20,20,Point);pDC-TextOut(20,20,Point); /以不同的颜色画点以不同的颜色画点pDC-SetPixel(100,20,RGB(255,0,0); pDC-SetPixel(100,20,RGB(255,0,0); pDC-SetPixel(110,20,RGB(0,255,0);pDC-SetPixel(110,20,RGB(0,255,0);pDC-SetPixel(120,20,RGB(0,0,255);pDC-SetPixel(120,20,RGB(0,0,255); 图形设备接口画笔与画刷画直线、矩形与椭圆/画直线画直线pDC-MoveTo(20,90);pDC-MoveTo(20,90);pDC-LineTo(160,90);pDC-LineTo(160,90);pDC-LineTo(130,80);pDC-LineTo(130,80);/直角矩形直角矩形pDC-Rectangle(190,270,250,310);pDC-Rectangle(190,270,250,310);/圆角矩形圆角矩形pDC-RoundRect(265,270,330,310,30,20);pDC-RoundRect(265,270,330,310,30,20);/椭圆椭圆pDC-Ellipse(200,160,280,200);pDC-Ellipse(200,160,280,200);图形设备接口画笔与画刷6.4 画笔和画刷6.4.1 6.4.1 画笔画笔6.4.2 6.4.2 画刷画刷6.4.3 6.4.3 画笔和画刷的应用程序举例画笔和画刷的应用程序举例图形设备接口画笔与画刷6.4.1 画笔一个画笔通常具有一个画笔通常具有宽度、样式和颜色宽度、样式和颜色三种属性。三种属性。画笔的宽度用来确定所画的线条宽度,它是用设备画笔的宽度用来确定所画的线条宽度,它是用设备单位表示的。默认的画笔宽度是单位表示的。默认的画笔宽度是一个一个像素单位。画像素单位。画笔的颜色确定了所画的线条颜色。画笔的样式确定笔的颜色确定了所画的线条颜色。画笔的样式确定了所绘图形的线型,它通常有了所绘图形的线型,它通常有实线实线(PS_SOLID)、虚线虚线(PS_DASH)、点线、点线(PS_DOT)、点划线、点划线(PS_DASHDOT)、双点划线、双点划线(PS_DASHDOTDOT)、不可见线、不可见线(PS_NULL)和内和内框线框线(PS_INSIDEFRAME)等七种样式。等七种样式。 图形设备接口画笔与画刷1. 创建画笔CPenCPen类类封封装装图图形形设设备备接接口口GDIGDI画画笔笔对对象象的的功功能能。创创建建画画笔笔可以采用以下几种方法:可以采用以下几种方法:(1)(1)使使用用无无参参构构造造函函数数声声明明对对象象,之之后后调调用用成成员员函函数数CreatePenCreatePen()()创建具体的画笔。创建具体的画笔。BOOL BOOL CreatePen(int CreatePen(int nPenStylenPenStyle, , int int nWidthnWidth, , COLORREF COLORREF crColorcrColor); ); 其其中中nPenStylenPenStyle表表示示画画笔笔的的样样式式。nWidthnWidth表表示示画画笔笔的的线线宽宽。crColorcrColor表示表示画笔的画笔的RGBRGB颜色颜色。例如:例如:CPen PenCPen Pen; Pen.CreatePen(PS_SOLID,1,RGB(255,0,0);Pen.CreatePen(PS_SOLID,1,RGB(255,0,0);/调用成员函数,创建线宽为调用成员函数,创建线宽为1 1的红色实线画笔的红色实线画笔图形设备接口画笔与画刷1. 创建画笔(2) (2) 使用构造函数创建画笔使用构造函数创建画笔CPen(int nPenStyle,int nWidth,COLORREF cfColor)CPen(int nPenStyle,int nWidth,COLORREF cfColor)例如:例如: CPen Pen(PS_SOLID,1,RGB(255,0,0);CPen Pen(PS_SOLID,1,RGB(255,0,0); / / 调用构造函数,创建线宽为调用构造函数,创建线宽为1 1的红色实线画笔的红色实线画笔图形设备接口画笔与画刷2. 库存画笔库库存存画画笔笔又又叫叫堆堆画画笔笔。WindowsWindows定定义义了了三三种种库库存存画画笔笔,程程序序员员可可以以直直接接使使用用这这些些画画笔笔,而而不不用用创创建建对对象象。三三种种库库存存画画笔笔分分别是:别是:BLANK_PENBLANK_PEN:黑色画笔;黑色画笔;WHILE_PENWHILE_PEN:白色画笔;白色画笔;NULL_PENNULL_PEN:空画笔。空画笔。可以使用可以使用CPen:CPen:CreatestockObject()CreatestockObject()函数进行创建。函数进行创建。CPen Pen;CPen Pen;Pen.CreatestockObject(WHILE_PEN);Pen.CreatestockObject(WHILE_PEN);可可以以以以库库存存画画笔笔为为参参数数来来调调用用SelectStockObject()SelectStockObject()函函数数, ,此此函函数数选选定定放放入入当当前前设设备备环环境境的的新新对对象象,并并返返回回一一个个指指向向被被替替换对象的指针换对象的指针,CPen *pOldPen=pDC-SelectStockObject(BLANK_PEN);CPen *pOldPen=pDC-SelectStockObject(BLANK_PEN);图形设备接口画笔与画刷3. 画笔的使用方法(1)(1) 创建画笔;创建画笔;(2)(2) 使用新的画笔,保存原来的画笔以便恢复;使用新的画笔,保存原来的画笔以便恢复; CPen *pOldPen; CPen *pOldPen; pOldPen=pDC- pOldPen=pDC-selectObject(&selectObject(&penRed);penRed);(3)(3) 使用新画笔作图;使用新画笔作图;(4)(4) 恢复原来的画笔恢复原来的画笔 pDC-selectObject(pOldPen); pDC-selectObject(pOldPen); 保保存存并并恢恢复复原原来来画画笔笔的的原原因因是是每每个个图图形形设设备备接接口口对对象象要要占占用用一一个个HDCHDC句句柄柄,而而可可用用的的句句柄柄数数量量有有限限,如如果果用用完完后后未未及及时时释释放放,积累下去将导致严重的运行错误。积累下去将导致严重的运行错误。图形设备接口画笔与画刷例:画笔的使用CPen *pNewPenCPen *pNewPen=new CPen=new CPen; ;if(pNewPen-CreatePen(PS_DASHDOT,3,RGB(255,0,0)if(pNewPen-CreatePen(PS_DASHDOT,3,RGB(255,0,0) CPen *pOldPen=pDC-SelectObject(pNewPen);CPen *pOldPen=pDC-SelectObject(pNewPen);/用新创建的画笔绘图用新创建的画笔绘图pDC-MoveTo(10,10);pDC-MoveTo(10,10); pDC-LineTo(150,10); pDC-LineTo(150,10); / /恢复设备描述表中原有的笔恢复设备描述表中原有的笔 pDC-SelectObject(pOldPen);pDC-SelectObject(pOldPen);elseelse MessageBox(CreatePen ERROR!);MessageBox(CreatePen ERROR!);delete pNewPen;delete pNewPen;图形设备接口画笔与画刷例:堆画笔的使用CPen *pOldPen=(CPen *)pDC-CPen *pOldPen=(CPen *)pDC-SelectStockObject(BLACK_PEN);SelectStockObject(BLACK_PEN); pDC-MoveTo(10,20); pDC-MoveTo(10,20);pDC-LineTo(200,20);pDC-LineTo(200,20);pDC-LineTo(200,40);pDC-LineTo(200,40);pDC-LineTo(10,40);pDC-LineTo(10,40);pDC-LineTo(10,20);pDC-LineTo(10,20);/恢复设备描述表中原有的笔恢复设备描述表中原有的笔pDC-SelectObject(pOldPen);pDC-SelectObject(pOldPen);图形设备接口画笔与画刷6.4.2 画刷画刷是用来填充图形的工具。画刷是用来填充图形的工具。画刷的属性通常包括画刷的属性通常包括填充色、填充图案和填充样式填充色、填充图案和填充样式三种。画刷的三种。画刷的填填充色充色和画笔颜色一样,都是使用和画笔颜色一样,都是使用COLORREFCOLORREF颜色类型;画刷的颜色类型;画刷的填充图案填充图案通常是用户定义的通常是用户定义的8 x 88 x 8位图;而位图;而填充样式填充样式往往是往往是CDCCDC内部定义的一些内部定义的一些特性,它们都是以特性,它们都是以HS_HS_为前缀的标识,如图所示:为前缀的标识,如图所示:HS_BDIAGONALHS_CROSSHS_DIAGCROSSHS_FDIAGONAL HS_HORIZONTAL HS_VERTICAL图形设备接口画笔与画刷6.4.2 画刷MFCMFC把把GDIGDI画画刷刷封封装装在在CRushCRush类类中中。画画刷刷的的使使用用方方法法同同画画笔笔。画画刷刷分分为为纯纯色色画画刷刷、阴阴影影画画刷刷、堆堆画画刷刷和和图图案案画画刷刷。CBrushCBrush类为不同的画刷类型提供了不同的构造函数。类为不同的画刷类型提供了不同的构造函数。WindowsWindows定义的堆画刷共有定义的堆画刷共有7 7种,分别是:种,分别是:BLACK_BRUSHBLACK_BRUSH:黑色画刷;黑色画刷;DKGRAY_BRUSHDKGRAY_BRUSH:深灰色画刷;深灰色画刷;GRAY_BRUSHGRAY_BRUSH:灰色画刷;灰色画刷;HOLLOW_BRUSHHOLLOW_BRUSH:空画刷;空画刷;LTGRAY_BRUSHLTGRAY_BRUSH:浅灰色画刷;浅灰色画刷;NULL_BRUSHNULL_BRUSH:空画刷;空画刷;WHITE_BRUSHWHITE_BRUSH:白色画刷;白色画刷;图形设备接口画笔与画刷6.4.2 画刷对对堆堆画画刷刷,调调用用SelectStockObject()SelectStockObject()函函数数进进行行选选择择画刷,画刷,例如:例如:CBrush * pOldBrush=pDC- CBrush * pOldBrush=pDC- SelectStockObject(WHITE_BRUSH); SelectStockObject(WHITE_BRUSH); / / 选择白色堆画刷选择白色堆画刷 图形设备接口画笔与画刷创建CBrush对象的四个构造函数为:(1) (1) CBrush(); CBrush(); / / 使用前必须初始化画刷使用前必须初始化画刷(2) (2) CBrush (COLORREF cfColor); CBrush (COLORREF cfColor); / / 构造带有指定颜色的纯色画刷构造带有指定颜色的纯色画刷例如:例如: CBrush Brush(RGB(255,0,0); / CBrush Brush(RGB(255,0,0); / 创建红色画刷创建红色画刷(3) (3) CBrush(int nIndex, COLORREF cfColor);CBrush(int nIndex, COLORREF cfColor); / / 构造带有指定阴影风格和颜色的填充画刷构造带有指定阴影风格和颜色的填充画刷 nIndex nIndex指定的阴影风格,如表指定的阴影风格,如表6.46.4所示。所示。(4) (4) CBrush(CBitmap*pBitmap);CBrush(CBitmap*pBitmap); / / 构造使用位图图案的画刷构造使用位图图案的画刷 CBitmapCBitmap对对象象最最大大可可使使用用8888像像素素,若若位位图图过过大大,则则只只有有左左上角的部分可以用作画刷图案。上角的部分可以用作画刷图案。图形设备接口画笔与画刷创建画刷的其他成员函数还可在创建画刷对象后,调用以下的还可在创建画刷对象后,调用以下的CBrushCBrush类的成员函数来类的成员函数来创建不同的画刷:创建不同的画刷:CreateSolidBrush():CreateSolidBrush():创建纯色画刷创建纯色画刷CreateHatchBrush():CreateHatchBrush():创建阴影画刷创建阴影画刷CreatePatternBrush():CreatePatternBrush():创建图案画刷创建图案画刷如:如:CBrush Brush;COLORREF c;CBrush Brush;COLORREF c;c=RGB(255,255,0);c=RGB(255,255,0);Brush. CreateHatchBrush(HS_DIAGCROSS, c);Brush. CreateHatchBrush(HS_DIAGCROSS, c);图形设备接口画笔与画刷例:画刷的使用 CBrush *pNewBrushCBrush *pNewBrush=new CBrush=new CBrush; ;pNewBrush-CreateSolidBrush(RGB(180,70,230);pNewBrush-CreateSolidBrush(RGB(180,70,230); CBrush * pOldBrush=pDC-SelectObject(pNewBrush); CBrush * pOldBrush=pDC-SelectObject(pNewBrush); /选择新画刷选择新画刷pDC-Rectangle(10,60,200,100); /pDC-Rectangle(10,60,200,100); /绘制矩形绘制矩形pDC-SelectObject(pOldBrush); /pDC-SelectObject(pOldBrush); /恢复设备描述表恢复设备描述表中原有的画刷中原有的画刷delete pNewBrush; /delete pNewBrush; /删除新画刷删除新画刷图形设备接口画笔与画刷例:画刷的使用 CBrush *pNewBrushCBrush *pNewBrush=new CBrush=new CBrush; ;pNewBrush-CreateSolidBrush(RGB(180,70,230)pNewBrush-CreateSolidBrush(RGB(180,70,230) CBrush * pOldBrush=pDC-SelectObject(pNewBrush); CBrush * pOldBrush=pDC-SelectObject(pNewBrush); /选择新画刷选择新画刷pDC-Rectangle(10,60,200,100); /pDC-Rectangle(10,60,200,100); /绘制矩形绘制矩形pDC-SelectObject(pOldBrush); /pDC-SelectObject(pOldBrush); /恢复设备描述表恢复设备描述表中原有的画刷中原有的画刷delete pNewBrush; /delete pNewBrush; /删除新画刷删除新画刷图形设备接口画笔与画刷6.5 字体 字字体体定定义义显显示示文文本本的的符符号号和和字字符符,通通过过处处理理字字体体可可以以显显示示某某种种特特殊殊效效果果的的文文字字,描描述述输输出出文文字字的的字字体体可可用用CFontCFont对象。对象。CFontCFont对象的使用方法与画笔和画刷类似,对象的使用方法与画笔和画刷类似,定义字体对象,定义字体对象,创建字体并保存原来的字体,创建字体并保存原来的字体,在文字输出工作结束后恢复原来的字体。在文字输出工作结束后恢复原来的字体。图形设备接口画笔与画刷字体的属性字体的主要属性有字体的主要属性有字样、风格和尺寸字样、风格和尺寸。字样是字样是字符书写和显示时表现的特定模式,如宋体、楷字符书写和显示时表现的特定模式,如宋体、楷体等多种字样。体等多种字样。字体风格主要表现为字体的粗细字体风格主要表现为字体的粗细和是否倾斜等特点。和是否倾斜等特点。字体是用来指定字体所占区字体是用来指定字体所占区域的大小,通常用字符高度来描述。域的大小,通常用字符高度来描述。图形设备接口画笔与画刷1字体的创建(1)(1)(1)为了方便用户创建字体,系统定义一种逻辑字体,根为了方便用户创建字体,系统定义一种逻辑字体,根据定义的逻辑字体,可调用据定义的逻辑字体,可调用CFontCFont类的类的CreateFontIndirectCreateFontIndirect函函数来创建字体。数来创建字体。LOGFONT lf;CFont cf;LOGFONT lf;CFont cf;memset(&lf,0,sizeof(LOGFONT);memset(&lf,0,sizeof(LOGFONT);lf.lfHeight=13;lf.lfHeight=13;strcpy(LPSTR)&(lf.lfFaceName),”strcpy(LPSTR)&(lf.lfFaceName),”黑体黑体”););cf.CreateFontIndirect(&lf);cf.CreateFontIndirect(&lf);图形设备接口画笔与画刷typedef struct tagLOGFONT typedef struct tagLOGFONT LONG LONG lfHeight; lfHeight; / / 字体的逻辑高度字体的逻辑高度 LONG LONG lfWidth; lfWidth; / / 字符的平均逻辑宽字符的平均逻辑宽度度 LONG LONG lfEscapement; / lfEscapement; / 倾角倾角 LONG LONG lfOrientation; / lfOrientation; / 书写方向书写方向 LONG LONG lfWeight; / lfWeight; / 字体的粗细程字体的粗细程度度 BYTE BYTE lfItalic; lfItalic; / / 斜体标志斜体标志 BYTE BYTE lfUnderline; lfUnderline; / / 下划线标志下划线标志 BYTE BYTE lfStrikeOut; lfStrikeOut; / / 删除线标志删除线标志 BYTE BYTE lfCharSet; lfCharSet; / / 字符集,汉字必须为字符集,汉字必须为GB2312_CHARSETGB2312_CHARSET TCHAR TCHAR lfFaceNameLF_FACESIZE / lfFaceNameLF_FACESIZE / 字样名称字样名称/ / LOGFONTLOGFONT; ; 图形设备接口画笔与画刷1字体的创建(2)当当需需要要某某一一特特定定的的字字体体时时,可可以以使使用用MFCMFC的的CFontCFont类类的的CreateFontCreateFont()()成成员员函函数数来来创创建建字字体体,若若该该函函数数调调用用成成功功,则则返返回回非非0 0值值,否则返回否则返回0 0。其函数原型如下:其函数原型如下:BOOL CFont:CreateFont(BOOL CFont:CreateFont(int nHeight, / int nHeight, / 字符逻辑高度字符逻辑高度int nWidth, / int nWidth, / 字符逻辑宽度字符逻辑宽度int nEscapement, / int nEscapement, / 出口矢量与出口矢量与X X轴的角度轴的角度int nOrientation, / int nOrientation, / 字符基线与字符基线与X X轴的角度轴的角度int nWeight, / int nWeight, / 字体磅值字体磅值BYTE bItalic, / BYTE bItalic, / 非非0 0则为斜体则为斜体图形设备接口画笔与画刷BYTE bUnderline, / BYTE bUnderline, / 非非0 0则加下划线则加下划线BYTE cStrickOut, / BYTE cStrickOut, / 非非0 0则加删除线则加删除线BYTE nCharSet, / BYTE nCharSet, / 此字体的字符集此字体的字符集BYTE nClipPrecision, / BYTE nClipPrecision, / 裁剪精度裁剪精度BYTE nQualty, / BYTE nQualty, / 输出质量输出质量BYTE nPitAndFamity, / BYTE nPitAndFamity, / 调距和字体族调距和字体族LPCSTR lpszFacenameLPCSTR lpszFacename;/ / 字体的字符名字体的字符名););CreateFont()CreateFont()成成员员函函数数并并不不能能产产生生新新的的Windows Windows GDIGDI字字体,它只是从体,它只是从GDIGDI字库中选择一种最近似的可用字体。字库中选择一种最近似的可用字体。1字体的创建(2)图形设备接口画笔与画刷字体和字体对话框CFontDialog类提供了字体及其文本颜色选择的类提供了字体及其文本颜色选择的通用对话框,表通用对话框,表10.24列出常用的成员函数。列出常用的成员函数。LOGFONT f; CFont cf;CFontDialog d;if(d.DoModal()=IDOK)d.GetCurrentFont(&f);cf.CreateFontIndirect(&f);pDC-SetTextColor(d.GetColor();图形设备接口画笔与画刷2 绘制文本常用文本输出函数文本的最终输出不仅依赖于文本的字体,而且还跟文本的颜色、文本的最终输出不仅依赖于文本的字体,而且还跟文本的颜色、对齐方式等有很大关系。对齐方式等有很大关系。CDCCDC类提供了类提供了4 4个输出文本的函数。个输出文本的函数。 (1)显示文本显示文本TextOut ()函数函数 TextOut ()函数函数是用当前字体在指定位置是用当前字体在指定位置 (x,y) 处处显示一个文本。显示一个文本。 virtual BOOL TextOut(int x,int y,LPCTSTR lpszString int nCount);BOOL TextOut(int x,int y,const CString & str);例:例:pDC-TextOut(10,10,”显示文本显示文本”);图形设备接口画笔与画刷常用文本输出函数(2) (2) 根据制表位,设置字符输出相应位置根据制表位,设置字符输出相应位置TabbedTextOutTabbedTextOut也是用当前字体在指定位置处显示一个文本,也是用当前字体在指定位置处显示一个文本,但它还根据指定的制表位但它还根据指定的制表位(Tab)(Tab)设置相应字符位置,函数成功设置相应字符位置,函数成功时返回输出文本的大小。时返回输出文本的大小。virtual CSize TabbedTextOut(int x,int y,LPCTSTR virtual CSize TabbedTextOut(int x,int y,LPCTSTR lpszString int nCount,int nTabPositions,LPINT lpszString int nCount,int nTabPositions,LPINT lpnTabStopPostions,int nTabOrigin);lpnTabStopPostions,int nTabOrigin);CSize TabbedTextOut(int x,int y,const CString CSize TabbedTextOut(int x,int y,const CString &str,int nTabPositions,LPINT lpnTabStopPostions,int &str,int nTabPositions,LPINT lpnTabStopPostions,int nTabOrigin);nTabOrigin);图形设备接口画笔与画刷常用文本输出函数(3) DrawText(3) DrawText函数是当前字体在指定矩形中对文本进行格函数是当前字体在指定矩形中对文本进行格式化绘制。式化绘制。virtual int DrawText( LPCTSTR lpszString, int virtual int DrawText( LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat );nCount, LPRECT lpRect, UINT nFormat );int DrawText( const CString& str, LPRECT lpRect, int DrawText( const CString& str, LPRECT lpRect, UINT nFormat );UINT nFormat );nFormatnFormat表示文本的格式,如下表所示,可以是其中的常表示文本的格式,如下表所示,可以是其中的常用值之一或用值之一或| |组合。组合。图形设备接口画笔与画刷DrawText函数中nFormat的值DT_SINGLELINEDT_SINGLELINE指定文本的基准线为参考点指定文本的基准线为参考点DT_TOPDT_TOP与参考矩形上对齐与参考矩形上对齐DT_BOTTOMDT_BOTTOM与参考矩形下对齐与参考矩形下对齐DT_VCENTERDT_VCENTER与参考矩形垂直居中与参考矩形垂直居中DT_LEFTDT_LEFT与参考矩形左对齐与参考矩形左对齐DT_RIGHTDT_RIGHT与参考矩形右对齐与参考矩形右对齐DT_CENTERDT_CENTER与参考矩形水平居中与参考矩形水平居中DT_WORDBREAKDT_WORDBREAK自动换行自动换行DT_MODIFYSTRINGDT_MODIFYSTRING将文本调整为能显示的文本串将文本调整为能显示的文本串图形设备接口画笔与画刷常用文本输出示例(10,10)(200,140)20020停止位为停止位为40个单位个单位停止位为停止位为80个单位个单位停止位为停止位为默认值默认值图形设备接口画笔与画刷在C*View类的OnDraw(CDC *pDC)函数中添加绘图代码:CRect rc(10, 10, 200, 140);CRect rc(10, 10, 200, 140);pDC-Rectangle( rc );pDC-Rectangle( rc );pDC-pDC-DrawTextDrawText( ( 单行文本居中单行文本居中, rc, , rc, DT_CENTER | DT_VCENTER | DT_CENTER | DT_VCENTER | DT_SINGLELINE);DT_SINGLELINE);图形设备接口画笔与画刷在C*View类的OnDraw(CDC *pDC)函数中添加绘图代码:rc.OffsetRect( 200, 0 );rc.OffsetRect( 200, 0 );/ / 将矩形向右偏移将矩形向右偏移200200pDC-Rectangle( rc );pDC-Rectangle( rc );int nTab = 40; /int nTab = 40; /将将TabTab位的值指定为位的值指定为4040个逻辑单位个逻辑单位pDC-TabbedTextOut( rc.left, rc.top, pDC-TabbedTextOut( rc.left, rc.top, 绘制绘制tTabttTabt文本文本tt示示例例, 1, &nTab, rc.left);, 1, &nTab, rc.left); / / 使用自定义的停止位使用自定义的停止位(Tab)(Tab)nTab = 80;nTab = 80;pDC-TabbedTextOut( rc.left, rc.top+20, pDC-TabbedTextOut( rc.left, rc.top+20, 绘制绘制tTabttTabt文本文本tt示例示例, 1, &nTab, rc.left);, 1, &nTab, rc.left); / / 使用自定义的停止位使用自定义的停止位(Tab)(Tab)pDC-TabbedTextOut( rc.left, rc.top+40, pDC-TabbedTextOut( rc.left, rc.top+40, 绘制绘制tTabttTabt文本文本tt示例示例, 0, NULL, 0);, 0, NULL, 0);/ / 使用默认的停止位使用默认的停止位图形设备接口画笔与画刷文本格式化属性文本的格式属性通常包括文本颜色、对齐方式、字文本的格式属性通常包括文本颜色、对齐方式、字符间隔以及文本调整等。在绘图设备环境中,默认的符间隔以及文本调整等。在绘图设备环境中,默认的文本颜色是黑色,而文本背景色为白色,文本颜色是黑色,而文本背景色为白色,在在CDC类中,类中,SetTextColor、SetBkColor和和SetBkMode函数就是分别用来设置文本颜色、文本函数就是分别用来设置文本颜色、文本背景色和背景模式背景色和背景模式,而与之相对应的,而与之相对应的GetTextColor、GetBkcolor和和GetBkMode函数则是分别获取这三函数则是分别获取这三项属性项属性的。的。SetTextAlign、GetTextAlign函数是设置和获取函数是设置和获取文本对齐方式文本对齐方式(文本的对齐方式如文本的对齐方式如P221表表7.5所示所示)。图形设备接口画笔与画刷文本格式化属性virtual COLORREF virtual COLORREF SetTextColorSetTextColor( COLORREF crColor );( COLORREF crColor );COLORREF COLORREF GetTextColorGetTextColor( ) const;( ) const;virtual COLORREF virtual COLORREF SetBkColorSetBkColor( COLORREF crColor );( COLORREF crColor );COLORREF COLORREF GetBkColorGetBkColor( ) const;( ) const;int int SetBkModeSetBkMode( int nBkMode );( int nBkMode );int int GetBkModeGetBkMode( ) const;( ) const;UINT SetTextAlign(UINT nFlags);UINT SetTextAlign(UINT nFlags);UINT GetTextAlign() const;UINT GetTextAlign() const;图形设备接口画笔与画刷 3字体的应用举例【例【例6.36.3】字体的应用程序举例。字体的应用程序举例。图形设备接口画笔与画刷代码(C*View:OnDraw()/默认的字体默认的字体pDC-TextOut(10,10,pDC-TextOut(10,10,默认的字体默认的字体););/设置字体颜色设置字体颜色pDC-SetTextColor(RGB(255,0,0);pDC-SetTextColor(RGB(255,0,0); / /设置背景色设置背景色pDC-SetBkColor(RGB(0,0,255); pDC-SetBkColor(RGB(0,0,255); /设置字符间间距设置字符间间距pDC-SetTextCharacterExtra(4); pDC-SetTextCharacterExtra(4); pDC-TextOut(10,30,pDC-TextOut(10,30,背景色为蓝色,文本颜色为红色,背景色为蓝色,文本颜色为红色,字符间距为字符间距为4 4的文字的文字););pDC-SetTextColor(RGB(0,0,0);pDC-SetTextColor(RGB(0,0,0);pDC-SetBkColor(RGB(255,255,255);pDC-SetBkColor(RGB(255,255,255);图形设备接口画笔与画刷代码(C*View:OnDraw()CFont *pOldFont;CFont *pOldFont;CFont *pNewFont=new CFont;CFont *pNewFont=new CFont;pNewFont-pNewFont-CreateFont(60,20,80,0,200,FALSE,FALSE,0,ANSI_CHARSCreateFont(60,20,80,0,200,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH&FF_SWISS,Aerial);UALITY,DEFAULT_PITCH&FF_SWISS,Aerial);pOldFont=(CFont *)pDC-SelectObject(pNewFont);pOldFont=(CFont *)pDC-SelectObject(pNewFont);pDC-TextOut(10,120,OOPpDC-TextOut(10,120,OOP程序设计!程序设计!););pDC-SelectObject(pOldFont);pDC-SelectObject(pOldFont);图形设备接口画笔与画刷补充:实时更新设置在应用程序中设置计时器。使用在应用程序中设置计时器。使用CWndCWnd类的成员函数类的成员函数SetTimerSetTimer来设置时间间隔。来设置时间间隔。如:如:SetTimer(1,1000,NULL)SetTimer(1,1000,NULL)第一个参数指定该计时器的标识值(最好不要为第一个参数指定该计时器的标识值(最好不要为0 0),),第二参数指定计时器的时间间隔(单位为第二参数指定计时器的时间间隔(单位为msms),第三个),第三个参数指定处理参数指定处理WM_TIMERWM_TIMER消息的函数,一般都设为消息的函数,一般都设为NULLNULL。设置计时器后,还应处理计时器消息设置计时器后,还应处理计时器消息WM_TIMERWM_TIMER,在相应,在相应的类中添加该消息映射函数,即每隔一个时间间隔执行的类中添加该消息映射函数,即每隔一个时间间隔执行该操作一次。该操作一次。图形设备接口画笔与画刷例:在状态栏上显示当前时间1.1.在在CMainFrame:OnCreateCMainFrame:OnCreate里增加代码里增加代码SetTimer(1,1000,NULL);SetTimer(1,1000,NULL);2.2.增加增加WM_ONTIMERWM_ONTIMER消息映射函数消息映射函数void CMainFrame:OnTimer(UINT nIDEvent) void CMainFrame:OnTimer(UINT nIDEvent) CTime t=CTime:GetCurrentTime();CTime t=CTime:GetCurrentTime();CString s=t.Format(%H:%M:%S);CString s=t.Format(%H:%M:%S);m_wndStatusBar.SetPaneText(0,s);m_wndStatusBar.SetPaneText(0,s);CFrameWnd:OnTimer(nIDEvent);CFrameWnd:OnTimer(nIDEvent); 图形设备接口画笔与画刷ThankYou!图形设备接口画笔与画刷图形设备接口画笔与画刷
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号