




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 图形与图像编程根底图形与图像编程根底本章主要学习内容:本章主要学习内容:图形处置的根本原理:图形处置的根本原理:图形设备接口图形设备接口设备环境设备环境GDIGDI坐标系坐标系映射方式映射方式运用画笔和画刷绘制图形运用画笔和画刷绘制图形文本与字体文本与字体位图、图标和光标位图、图标和光标6.3 绘制根本图形WindowsWindows中的根本图形包括点、直线、圆、圆中的根本图形包括点、直线、圆、圆弧、矩形、椭圆等。弧、矩形、椭圆等。MFCMFC把绘制这些图形的函数把绘制这些图形的函数封装在封装在CDCCDC类中。类中。绘图通常编写绘图通常编写C C* *ViewView类的类的OnDraw(
2、CDC OnDraw(CDC * *pDC)pDC)函数,其中参数函数,其中参数pDCpDC指当前设备环境指针。指当前设备环境指针。补充:橡皮筋技术利用SetROP2函数 先了解先了解SetROP2SetROP2函数的两个参数函数的两个参数R2_NOTR2_NOT与与R2_NOTXORPENR2_NOTXORPEN的运用效果,以下为该两种绘画方式的运用效果,以下为该两种绘画方式举例:举例:R2_NOTXORPENR2_NOTXORPEN绘画方式绘画方式他用红色画笔在黑色背景上画一条直线,显示红色,但他用红色画笔在黑色背景上画一条直线,显示红色,但他再用这只笔在刚画的直线上重画一遍,就相当于把开
3、他再用这只笔在刚画的直线上重画一遍,就相当于把开场画的红线擦除掉了,划线的地方显示为背风光。场画的红线擦除掉了,划线的地方显示为背风光。 R2_NOTR2_NOT绘画方式绘画方式同样有在同一个地方画两次相当于什么都没画的功能,同样有在同一个地方画两次相当于什么都没画的功能,不过不过R2_NOTR2_NOT绘画方式第一次画的时候显示颜色并不是绘画方式第一次画的时候显示颜色并不是他选定的画笔颜色,而是默许的颜色。他选定的画笔颜色,而是默许的颜色。 颜色一个彩色象素的显示需求颜色空间的支持,常一个彩色象素的显示需求颜色空间的支持,常用的颜色空间有用的颜色空间有RGB。RGB颜色空间选用红颜色空间选用
4、红(R)、绿绿(G)、蓝、蓝(B)三种基色分量,经过对这三种基色不三种基色分量,经过对这三种基色不同比例的混合,可以得到不同的彩色效果。同比例的混合,可以得到不同的彩色效果。在在MFC中,中,CDC运用的是运用的是RGB颜色空间,其中,颜色空间,其中,COLORREF是用来表示是用来表示RGB颜色的一个颜色的一个32位的数位的数据类型。它可以用以下的十六进制表示一个据类型。它可以用以下的十六进制表示一个RGB值:值:0 x00bbggrr,其中,其中bb、gg、rr分别表示蓝、绿、分别表示蓝、绿、红红3个颜色分量的十六进制值。个颜色分量的十六进制值。颜色在详细操作在详细操作RGB颜色时,可运用
5、以下的宏操作:颜色时,可运用以下的宏操作:GetBValue、GetGValue、GetRValue来获得其来获得其中各个颜色分量值。中各个颜色分量值。如:如:int nRed=GetBValue(color);RGB可以将指定的三个分量值转换成一个可以将指定的三个分量值转换成一个32位的位的RGB颜色值。颜色值。如:如:COLORREF color=RGB(nRed,nGreen,nBlue);颜色和颜色对话框MFC的的CColorDialog类为运用程序提供了颜色选类为运用程序提供了颜色选择通用对话框,构造函数如下:择通用对话框,构造函数如下:CColorDialog(COLORREF c
6、lrInit=0,DWORD dwFlags=0,CWnd * pParentWnd=NULL);其中,其中,clrInit指定选择的默许颜色值,默以为指定选择的默许颜色值,默以为RGB(0,0,0)黑色。黑色。pParentWnd指定对话框的父窗口指定对话框的父窗口指针。指针。dwFlags指定对话框外观和功能指定对话框外观和功能(见教材见教材P209)。当对话框单击当对话框单击OK退出时,可调用以下成员函数获得相退出时,可调用以下成员函数获得相应的颜色。应的颜色。COLORREF GetColor() const;void SetCurrentColor(COLORREF clr);sta
7、tic 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,2
8、55,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
9、,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 画笔一个画笔通常具有宽度、款式和颜色三种属性。一个画笔通常具有宽度、款式和颜色三种属性。画笔的宽度用来确定所画的线条宽度,它是用设
10、备画笔的宽度用来确定所画的线条宽度,它是用设备单位表示的。默许的画笔宽度是一个像素单位。画单位表示的。默许的画笔宽度是一个像素单位。画笔的颜色确定了所画的线条颜色。画笔的款式确定笔的颜色确定了所画的线条颜色。画笔的款式确定了所绘图形的线型,它通常有实线了所绘图形的线型,它通常有实线(PS_SOLID)、虚线虚线(PS_DASH)、点线、点线(PS_DOT)、点划线、点划线(PS_DASHDOT)、双点划线、双点划线(PS_DASHDOTDOT)、不可见线、不可见线(PS_NULL)和内和内框线框线(PS_INSIDEFRAME)等七种款式。等七种款式。 1. 创建画笔CPenCPen类封装图形
11、设备接口类封装图形设备接口GDIGDI画笔对象的功能。创建画笔画笔对象的功能。创建画笔可以采用以下几种方法:可以采用以下几种方法:(1)(1)运用无参构造函数声明对象,之后调用成员函数运用无参构造函数声明对象,之后调用成员函数CreatePen()CreatePen()创建详细的画笔。创建详细的画笔。BOOL CreatePen(int nPenStyle, int nWidth, BOOL CreatePen(int nPenStyle, int nWidth, COLORREF crColor); COLORREF crColor); 其中其中nPenStylenPenStyle表示画笔的
12、款式。表示画笔的款式。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)C
13、Pen(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_PEN
14、BLANK_PEN:黑色画笔;:黑色画笔;WHILE_PENWHILE_PEN:白色画笔;:白色画笔;NULL_PENNULL_PEN:空画笔。:空画笔。可以运用可以运用CPen:CreatestockObject()CPen:CreatestockObject()函数进展创建。函数进展创建。CPen Pen;CPen Pen;Pen.CreatestockObject(WHILE_PEN);Pen.CreatestockObject(WHILE_PEN);可以以库存画笔为参数来调用可以以库存画笔为参数来调用SelectStockObject()SelectStockObject()函数函数,
15、 ,此函数选定放入当前设备环境的新对象,并前往一个指向被交此函数选定放入当前设备环境的新对象,并前往一个指向被交换对象的指针,换对象的指针,CPen CPen * *pOldPen=pDC-SelectStockObject(BLANK_PEN);pOldPen=pDC-SelectStockObject(BLANK_PEN);3. 画笔的运用方法(1) (1) 创建画笔;创建画笔;(2) (2) 运用新的画笔,保管原来的画笔以便恢复;运用新的画笔,保管原来的画笔以便恢复; CPen CPen * *pOldPen;pOldPen; pOldPen=pDC-selectObject(&
16、penRed); pOldPen=pDC-selectObject(&penRed);(3) (3) 运用新画笔作图;运用新画笔作图;(4) (4) 恢复原来的画笔恢复原来的画笔 pDC-selectObject(pOldPen); pDC-selectObject(pOldPen); 保管并恢复原来画笔的缘由是每个图形设备接口对象要占用一保管并恢复原来画笔的缘由是每个图形设备接口对象要占用一个个HDCHDC句柄,而可用的句柄数量有限,假设用完后未及时释放,句柄,而可用的句柄数量有限,假设用完后未及时释放,积累下去将导致严重的运转错误。积累下去将导致严重的运转错误。例:画笔的运用CPe
17、n CPen * *pNewPen=new CPen;pNewPen=new CPen;if(pNewPen-CreatePen(PS_DASHDOT,3,RGB(255,0,0)if(pNewPen-CreatePen(PS_DASHDOT,3,RGB(255,0,0) CPen CPen * *pOldPen=pDC-SelectObject(pNewPen);pOldPen=pDC-SelectObject(pNewPen);/用新创建的画笔绘图用新创建的画笔绘图pDC-MoveTo(10,10);pDC-MoveTo(10,10); pDC-LineTo(150,10); pDC-Li
18、neTo(150,10); / /恢复设备描画表中原有的笔恢复设备描画表中原有的笔 pDC-SelectObject(pOldPen); pDC-SelectObject(pOldPen);elseelse MessageBox(CreatePen ERROR!);MessageBox(CreatePen ERROR!);delete pNewPen;delete pNewPen;例:堆画笔的运用CPen CPen * *pOldPen=(CPen pOldPen=(CPen * *)pDC-)pDC-SelectStockObject(BLACK_PEN);SelectStockObject
19、(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 画刷画刷是用来填充图形的工具。画刷是用
20、来填充图形的工具。画刷的属性通常包括填充色、填充图案和填充款式三种。画刷的画刷的属性通常包括填充色、填充图案和填充款式三种。画刷的填充色和画笔颜色一样,都是运用填充色和画笔颜色一样,都是运用COLORREFCOLORREF颜色类型;画刷的填充图颜色类型;画刷的填充图案通常是用户定义的案通常是用户定义的8 x 88 x 8位图;而填充款式往往是位图;而填充款式往往是CDCCDC内部定义的一内部定义的一些特性,它们都是以些特性,它们都是以HS_HS_为前缀的标识,如下图:为前缀的标识,如下图:HS_BDIAGONALHS_CROSSHS_DIAGCROSSHS_FDIAGONAL HS_HORIZ
21、ONTAL HS_VERTICAL6.4.2 画刷 MFCMFC把把GDIGDI画刷封装在画刷封装在CRushCRush类中。画刷的运用方法同画笔。类中。画刷的运用方法同画笔。画刷分为纯色画刷、阴影画刷、堆画刷和图案画刷。画刷分为纯色画刷、阴影画刷、堆画刷和图案画刷。CBrushCBrush类为不同的画刷类型提供了不同的构造函数。类为不同的画刷类型提供了不同的构造函数。WindowsWindows定义的堆画刷共有定义的堆画刷共有7 7种,分别是:种,分别是:BLACK_BRUSHBLACK_BRUSH:黑色画刷;:黑色画刷;DKGRAY_BRUSHDKGRAY_BRUSH:深灰色画刷;:深灰色
22、画刷;GRAY_BRUSHGRAY_BRUSH:灰色画刷;:灰色画刷;HOLLOW_BRUSHHOLLOW_BRUSH:空画刷;:空画刷;LTGRAY_BRUSHLTGRAY_BRUSH:浅灰色画刷;:浅灰色画刷;NULL_BRUSHNULL_BRUSH:空画刷;:空画刷;WHITE_BRUSHWHITE_BRUSH:白色画刷;:白色画刷;6.4.2 画刷对堆画刷,调用对堆画刷,调用SelectStockObject()SelectStockObject()函数进展选择函数进展选择画刷,画刷,例如:例如:C B r u s h C B r u s h * * p O l d B r u s h
23、 = p D C - p O l d B r u s h = p D C - SelectStockObject(WHITE_BRUSH); SelectStockObject(WHITE_BRUSH); / / 选择白色堆画刷选择白色堆画刷 创建CBrush对象的四个构造函数为:(1) CBrush(); / (1) CBrush(); / 运用前必需初始化画刷运用前必需初始化画刷(2) CBrush (COLORREF cfColor); (2) CBrush (COLORREF cfColor); / / 构造带有指定颜色的纯色画刷构造带有指定颜色的纯色画刷例如:例如: CBrush B
24、rush(RGB(255,0,0); / CBrush Brush(RGB(255,0,0); / 创建红色画刷创建红色画刷(3) CBrush(int nIndex, COLORREF cfColor);(3) CBrush(int nIndex, COLORREF cfColor); / / 构造带有指定阴影风格和颜色的填充画刷构造带有指定阴影风格和颜色的填充画刷 nIndex nIndex指定的阴影风格,如表指定的阴影风格,如表6.46.4所示。所示。(4) CBrush(CBitmap(4) CBrush(CBitmap* *pBitmap);pBitmap); / / 构造运用位图图
25、案的画刷构造运用位图图案的画刷 CBitmap CBitmap对象最大可运用对象最大可运用8 88 8像素,假设位图过大,那么只像素,假设位图过大,那么只需左上角的部分可以用作画刷图案。需左上角的部分可以用作画刷图案。创建画刷的其他成员函数 还可在创建画刷对象后,调用以下的还可在创建画刷对象后,调用以下的CBrushCBrush类的成员函数来类的成员函数来创建不同的画刷:创建不同的画刷:CreateSolidBrush():CreateSolidBrush():创建纯色画刷创建纯色画刷CreateHatchBrush():CreateHatchBrush():创建阴影画刷创建阴影画刷Creat
26、ePatternBrush():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 CBrush * *pNewBrush=new CBrush;pNewBrush=new CBrush;pNewBrush-Create
27、SolidBrush(RGB(180,70,230);pNewBrush-CreateSolidBrush(RGB(180,70,230); C B r u s h C B r u s h * * p O l d B r u s h = p D C - p O l d B r u s h = p D C -SelectObject(pNewBrush); /SelectObject(pNewBrush); /选择新画刷选择新画刷pDC-Rectangle(10,60,200,100); /pDC-Rectangle(10,60,200,100); /绘制矩形绘制矩形pDC-SelectObje
28、ct(pOldBrush); /pDC-SelectObject(pOldBrush); /恢复设备描画表恢复设备描画表中原有的画刷中原有的画刷delete pNewBrush; /delete pNewBrush; /删除新画刷删除新画刷例:画刷的运用 CBrush CBrush * *pNewBrush=new CBrush;pNewBrush=new CBrush;pNewBrush-CreateSolidBrush(RGB(180,70,230)pNewBrush-CreateSolidBrush(RGB(180,70,230) C B r u s h C B r u s h * *
29、p O l d B r u s h = p D C - p O l d B r u s h = p D C -SelectObject(pNewBrush); /SelectObject(pNewBrush); /选择新画刷选择新画刷pDC-Rectangle(10,60,200,100); /pDC-Rectangle(10,60,200,100); /绘制矩形绘制矩形pDC-SelectObject(pOldBrush); /pDC-SelectObject(pOldBrush); /恢复设备描画表恢复设备描画表中原有的画刷中原有的画刷delete pNewBrush; /delete p
30、NewBrush; /删除新画刷删除新画刷6.5 字体 字体定义显示文本的符号和字符,经过处置字体可以显字体定义显示文本的符号和字符,经过处置字体可以显示某种特殊效果的文字,描画输出文字的字体可用示某种特殊效果的文字,描画输出文字的字体可用CFontCFont对象。对象。CFontCFont对象的运用方法与画笔和画刷类似,对象的运用方法与画笔和画刷类似,定义字体对象,定义字体对象,创建字体并保管原来的字体,创建字体并保管原来的字体,在文字输出任务终了后恢复原来的字体。在文字输出任务终了后恢复原来的字体。字体的属性 字体的主要属性有字样、风格和尺寸。字样是字体的主要属性有字样、风格和尺寸。字样是
31、字符书写和显示时表现的特定方式,如宋体、楷字符书写和显示时表现的特定方式,如宋体、楷体等多种字样。字体风格主要表现为字体的粗细体等多种字样。字体风格主要表现为字体的粗细和能否倾斜等特点。字体是用来指定字体所占区和能否倾斜等特点。字体是用来指定字体所占区域的大小,通常用字符高度来描画。域的大小,通常用字符高度来描画。1字体的创建(1)(1)(1)为了方便用户创建字体,系统定义一种逻辑字体,根为了方便用户创建字体,系统定义一种逻辑字体,根据定义的逻辑字体,可调用据定义的逻辑字体,可调用CFontCFont类的类的CreateFontIndirectCreateFontIndirect函数来创建字体
32、。函数来创建字体。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 t
33、agLOGFONT 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 lfIta
34、lic; lfItalic; / / 斜体标志斜体标志 BYTE BYTE lfUnderline; lfUnderline; / / 下划线标志下划线标志 BYTE BYTE lfStrikeOut; lfStrikeOut; / / 删除线标志删除线标志 BYTE BYTE lfCharSet; lfCharSet; / / 字符集,汉字必需为字符集,汉字必需为GB2312_CHARSETGB2312_CHARSET TCHAR TCHAR lfFaceNameLF_FACESIZE / lfFaceNameLF_FACESIZE / 字样称号字样称号/ / LOGFONT; LOGFON
35、T; 1字体的创建(2)当需求某一特定的字体时,可以运用当需求某一特定的字体时,可以运用MFCMFC的的CFontCFont类的类的CreateFont()CreateFont()成员函数来创建字体,假设该函数调用胜利,成员函数来创建字体,假设该函数调用胜利,那么前往非那么前往非0 0值,否那么前往值,否那么前往0 0。其函数原型如下:其函数原型如下:BOOL CFont:CreateFont(BOOL CFont:CreateFont(int nHeight, / int nHeight, / 字符逻辑高度字符逻辑高度int nWidth, / int nWidth, / 字符逻辑宽度字符逻
36、辑宽度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, /
37、 非非0 0那么加删除线那么加删除线BYTE nCharSet, / BYTE nCharSet, / 此字体的字符集此字体的字符集BYTE nClipPrecision, / BYTE nClipPrecision, / 裁剪精度裁剪精度BYTE nQualty, / BYTE nQualty, / 输出质量输出质量BYTE nPitAndFamity, / BYTE nPitAndFamity, / 调距和字体族调距和字体族LPCSTR lpszFacenameLPCSTR lpszFacename;/ / 字体的字符名字体的字符名););CreateFont()CreateFont()成
38、员函数并不能产生新的成员函数并不能产生新的Windows GDIWindows GDI字字体,它只是从体,它只是从GDIGDI字库中选择一种最近似的可用字体。字库中选择一种最近似的可用字体。1字体的创建(2)字体和字体对话框CFontDialog类提供了字体及其文本颜色选择的类提供了字体及其文本颜色选择的通用对话框,表通用对话框,表10.24列出常用的成员函数。列出常用的成员函数。LOGFONT f; CFont cf;CFontDialog d;if(d.DoModal()=IDOK)d.GetCurrentFont(&f);cf.CreateFontIndirect(&f)
39、;pDC-SetTextColor(d.GetColor();2 绘制文本常用文本输出函数文本的最终输出不仅依赖于文本的字体,而且还跟文本的颜色、文本的最终输出不仅依赖于文本的字体,而且还跟文本的颜色、对齐方式等有很大关系。对齐方式等有很大关系。CDCCDC类提供了类提供了4 4个输出文本的函数。个输出文本的函数。 (1)显示文本显示文本TextOut ()函数函数 TextOut ()函数是用当前字体在指定位置函数是用当前字体在指定位置 (x,y) 处处显示一个文本。显示一个文本。 virtual BOOL TextOut(int x,int y,LPCTSTR lpszString int
40、 nCount);BOOL TextOut(int x,int y,const CString & str);例:例:pDC-TextOut(10,10,显示文本显示文本);常用文本输出函数(2) (2) 根据制表位,设置字符输出相应位置根据制表位,设置字符输出相应位置TabbedTextOutTabbedTextOut也是用当前字体在指定位置处显示一个文也是用当前字体在指定位置处显示一个文本,但它还根据指定的制表位本,但它还根据指定的制表位(Tab)(Tab)设置相应字符位置,函数设置相应字符位置,函数胜利时前往输出文本的大小。胜利时前往输出文本的大小。virtual CSize T
41、abbedTextOut(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 &str,in
42、t CSize TabbedTextOut(int x,int y,const CString &str,int nTabPositions,LPINT lpnTabStopPostions,int nTabOrigin);nTabPositions,LPINT lpnTabStopPostions,int nTabOrigin);常用文本输出函数(3) DrawText(3) DrawText函数是当前字体在指定矩形中对文本进展格函数是当前字体在指定矩形中对文本进展格式化绘制。式化绘制。 virtual int DrawText( LPCTSTR lpszString, int nC
43、ount, virtual int DrawText( LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat );LPRECT lpRect, UINT nFormat );int DrawText( const CString& str, LPRECT lpRect, UINT int DrawText( const CString& str, LPRECT lpRect, UINT nFormat );nFormat );nFormatnFormat表示文本的格式,如下表所示,可以是其中的常表示文本的格式,如
44、下表所示,可以是其中的常用值之一或用值之一或| |组合。组合。DrawText函数中nFormat的值DT_SINGLELINEDT_SINGLELINE指定文本的基准线为参考点指定文本的基准线为参考点DT_TOPDT_TOP与参考矩形上对齐与参考矩形上对齐DT_BOTTOMDT_BOTTOM与参考矩形下对齐与参考矩形下对齐DT_VCENTERDT_VCENTER与参考矩形垂直居中与参考矩形垂直居中DT_LEFTDT_LEFT与参考矩形左对齐与参考矩形左对齐DT_RIGHTDT_RIGHT与参考矩形右对齐与参考矩形右对齐DT_CENTERDT_CENTER与参考矩形水平居中与参考矩形水平居中D
45、T_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-DrawT
46、ext( pDC-DrawText( 单行文本居中单行文本居中, 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;
47、 /将将TabTab位的值指定为位的值指定为4040个逻辑单位个逻辑单位pDC-TabbedTextOut( rc.left, rc, pDC-TabbedTextOut( rc.left, rc, 绘制绘制tTabttTabt文本文本tt例如例如, 1, , 1, &nTab, rc.left);&nTab, rc.left); / / 运用自定义的停顿位运用自定义的停顿位(Tab)(Tab)nTab = 80;nTab = 80;pDC-TabbedTextOut( rc.left, rc+20, pDC-TabbedTextOut( rc.left, rc+20, 绘制绘
48、制tTabttTabt文本文本tt例如例如, , 1, &nTab, rc.left);1, &nTab, rc.left); / / 运用自定义的停顿位运用自定义的停顿位(Tab)(Tab)pDC-TabbedTextOut( rc.left, rc+40, pDC-TabbedTextOut( rc.left, rc+40, 绘制绘制tTabttTabt文本文本tt例如例如, , 0, NULL, 0);0, NULL, 0);/ / 运用默许的停顿位运用默许的停顿位文本格式化属性文本的格式属性通常包括文本颜色、对齐方式、字文本的格式属性通常包括文本颜色、对齐方式、字符间隔
49、以及文本调整等。在绘图设备环境中,默许的符间隔以及文本调整等。在绘图设备环境中,默许的文本颜色是黑色,而文本背风光为白色,文本颜色是黑色,而文本背风光为白色,在在CDC类中,类中,SetTextColor、SetBkColor和和SetBkMode函数就是分别用来设置文本颜色、文本函数就是分别用来设置文本颜色、文本背风光和背景方式,而与之相对应的背风光和背景方式,而与之相对应的GetTextColor、GetBkcolor和和GetBkMode函数那么是分别获取这函数那么是分别获取这三项属性的。三项属性的。SetTextAlign、GetTextAlign函数是设置和获取函数是设置和获取文本对
50、齐方式文本对齐方式(文本的对齐方式如文本的对齐方式如P221表表7.5所示所示)。文本格式化属性virtual COLORREF SetTextColor( COLORREF crColor );virtual COLORREF SetTextColor( COLORREF crColor );COLORREF GetTextColor( ) const;COLORREF GetTextColor( ) const;virtual COLORREF SetBkColor( COLORREF crColor );virtual COLORREF SetBkColor( COLORREF crCo
51、lor );COLORREF GetBkColor( ) const;COLORREF GetBkColor( ) const;int SetBkMode( int nBkMode );int SetBkMode( int nBkMode );int GetBkMode( ) const;int GetBkMode( ) const;UINT SetTextAlign(UINT nFlags);UINT SetTextAlign(UINT nFlags);UINT GetTextAlign() const;UINT GetTextAlign() const; 3字体的运用举例【例【例6.36.
52、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-SetText
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海南经贸职业技术学院《电视专题》2023-2024学年第二学期期末试卷
- 森林资源培育苗木采购合同
- 小型办公用房租赁合同简短模板
- 购物中心租赁经营合同样本
- 电信基础设施共建合同模板
- 劳动合同争议答辩状范本新
- 房地产建设项目施工合同
- 房地产开发合作合同书范文
- 大型工程项目合同协议书范本专业版
- 期货市场交易系统的用户友好性改进考核试卷
- 考前冲刺攻略课件
- 2024年12月2025中央统战部直属事业单位应届高校毕业生公开招聘21人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2024年湖北省烟草专卖局(公司)招聘笔试真题
- 2025中铁快运股份限公司招聘全日制普通高校毕业生35人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年浙江宁波宁兴集团有限公司招聘笔试参考题库含答案解析
- 计算机网络试题及答案
- 2025年安徽马鞍山市两山绿色生态环境建设有限公司招聘笔试参考题库附带答案详解
- 人效管理措施
- 篮球教练职业生涯规划
- 机器人手术后期护理
- 自力式调节阀阀门
评论
0/150
提交评论