您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > MFC-Windows应用程序设计-第4章-图形
MFCWindows应用程序设计第4章图形DC和GDI4.1CDC类4.2CPen类4.3CBrush类4.4绘图模式4.5CDC的其他派生类4.7文本和CFont类4.64.1DC和GDI4.1.1设备描述环境DC(DeviceContext,DC):在Windows中,表现为一个叫做图形设备描述表的数据结构,它描述虚拟图形设备的属性,所以也叫做图形设备描述环境。应用程序图形设备描述环境设备驱动程序物理图形显示设备图4-1图形设备描述表的基本概念4.1DC和GDI4.1.2Windows的GDIGDI:图形设备接口,绘图相关操作的函数集合。4.1DC和GDI表4.1GDI中的绘图工具及其对应MFC类对象名称类名说明Bitmap(位图)CBitmap用户可以利用来表示图像,也可以利用它来创建画刷。Brush(画刷)CBrush“画刷”定义了一种位图形式的象素,利用它可对区域内部填充颜色或样式。Font(字体)CFont“字体”是一种具有某种风格和尺寸的所有字符的完整集合。Palette(调色板)CPalette“调色板”是一种颜色映射接口,绘图时可以使用的颜色集。Pen(画笔)CPen“画笔”是一种用来画线及绘制有形边框的工具。CGdiObject4.2CDC类4.2.1CDC类及其派生类CDC类封装了绘图所需要的所有成员函数,以及各种类型的Windows图形设备描述环境的全部功能。CObjectCDCCMetaFileDCCWindowDCCClientDCCPaintDC图4-2MFC设备描述环境类层次结构OnDraw窗口用户区域整个窗口图元文件WM_PAINT4.2CDC类1、画线BOOLLineTo(intx,inty);BOOLLineTo(POINTpoint);LineTo从当前位置画直线到参数指定位置。CPointMoveTo(intx,inty);CPointMoveTo(POINTpoint);MoveTo从当前位置把画笔移到参数指定位置。4.2.2CDC类中常用成员函数4.2CDC类2、矩形和圆角矩形BOOLRectangle(intx1,inty1,intx2,inty2);BOOLRectangle(LPCRECTlpRect);BOOLRoundRect(intx1,inty1,intx2,inty2,intx3,inty3);BOOLRoundRect(LPCRECTlpRect,POINTpoint);4.2.2CDC类中常用成员函数4.2CDC类3、椭圆和圆弧BOOLEllipse(intx1,inty1,intx2,inty2);BOOLEllipse(LPCRECTlpRect);BOOLArc(intx1,inty1,intx2,inty2,intx3,inty3,intx4,inty4);BOOLArc(LPCRECTlpRect,POINTptStart,POINTptEnd);4.2.1CDC类中常用成员函数4.2CDC类练习:1、用鼠标控制直线、矩形、椭圆的绘制。4.2.1CDC类中常用成员函数2、用鼠标控制绘制任意多边形提示以直线为例,将左键按下时坐标点作为直线开始点,左键弹起作为直线终点,在左键弹起消息处理函数里绘制直线。提示鼠标第一次左键按下的点作为多边形的开始点,保存开始点,以后每一次左键弹起的点作为多边形的一个顶点,直到左键弹起点和开始的位置接近结束。也可以利用CDC类中绘制多边形的函数来完成。4.2CDC类4.2.1CDC类中常用成员函数作业:用鼠标控制任意线的绘制。作业本:P1104-1,4-2,4-3,4-4请查看MFC帮助文件,找出绘制点、饼形图函数,尝试绘制相应图形。4.2CDC类4、点COLORREFSetPixel(intx,inty,COLORREFcolor);COLORREFSetPixel(POINTpoint,COLORREFcolor);COLORREFGetPixel(intx,inty);COLORREFGetPixel(POINTpoint);4.2.1CDC类中常用成员函数COLORREFRGB(BYTEbRed,BYTEbGreen,BYTEbBlue);//bRed,bGreen,bBlue//取值0~2554.2CDC类5、位图函数BOOLBitBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,DWORDdwRop);BitBlt:把一个DC中的位图复制到另一个DC中。4.2.1CDC类中常用成员函数dwRop:指定光栅操作。光栅操作模式说明了GDI是如何组合输出操作中的颜色,包括当前画刷、可能的源位图和目标位图。可以为下列值之一,如表4.2:dwRop取值含义BLACKNESS将所有输出变为黑色DSTINBERT反转目标位图颜色MERGECOPY使用AND运算符组合模板与源位图的颜色MERGEPAINT使用OR运算符组合源位图的反色与目标矩形的颜色NOTSRCCOPY将源位图的反色拷贝到目标矩形中NOTSRCERASE反转使用OR运算符组合源位图与目标矩形后得到的颜色PATCOPY将模板颜色拷贝到目标矩形中PATINVERT使用XOR运算符组合目标矩形与模板颜色表4.2dwRop取值dwRop取值含义PATPAINT使用OR运算符组合模板与源位图的反色。再使用OR运算符将该操作结果与目标矩形组合SRCAND使用AND运算符组合源位图和目标位图的像素SRCCOPY将源位图拷贝到目标位图SRCERASE反转目标矩形的颜色,再使用AND运算符将该结果与源位图组合SRCINVERT使用XOR运算符组合源位图和目标位图的像素SRCPAINT使用OR运算符组合源位图和目标位图的像素WHITENESS使所有输出变成白色续表4.2dwRop取值4.2CDC类5、位图函数BOOLStretchBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,intnSrcWidth,intnSrcHeight,DWORDdwRop);StretchBlt:把一个DC中的位图复制到另一个DC中,但可以改变位图的长宽比。4.2.1CDC类中常用成员函数练习尝试做出放大镜功能效果。4.2CDC类6、绘图工具选入绘图环境函数CGdiObject*SelectStockObject(intnIndex);SelectStockObject:将指定的库存绘图工具选入绘图环境CPen*SelectObject(CPen*pPen);………SelectObject:将指定的绘图工具选入绘图环境4.2.1CDC类中常用成员函数4.3CPen类1、库存画笔利用SelectStockObject将库存画笔选入绘图环境。CGdiObject*SelectStockObject(intnIndex);BLACK_PEN黑色画笔WHITE_PEN白色画笔NULL_PEN空画笔表4.2库存画笔4.3CPen类2、自定义画笔—CPen类CPen(intstyle,intwidth,COLORREFcolor);style:画笔样式width:画笔宽度。风格含义PS_SOLID实线PS_DASH虚线PS_DOT点线PS_DASHDOT点划线PS_DASHDOTDOT双点划线PS_NULL不可见线PS_INSIDEFRAME内框线表4.3画笔样式4.3CPen类2、自定义画笔CPen(intstyle,intwidth,COLORREFcolor);color:设置画笔颜色,用RGB值来描述。通过SelectObject将自定义画笔选入绘图环境。CPen*SelectObject(CPen*pPen);4.3CPen类2、自定义画笔BOOLCPen::CreatePen(intstyle,intwidth,COLORREFcolor);4.3CPen类练习:进一步完善鼠标控制直线的绘制作业:P1104-7练习:尝试画图软件中的取色吸管功能4.4CBrush类1、库存画刷BLACK_BRUSH黑色画刷DKGRAY_BRUSH深灰色画刷GRAY_BRUSH灰色画刷HOLLOW_BRUSH中空画刷LTGRAY_BRUSH浅灰色画刷NULL_BRUSH空画刷WHITE_BRUSH白色画刷利用SelectStockObject将库存画刷选入绘图环境。4.4CBrush类2、自定义画刷CBrush(COLORREFcrColor);CBrush(intnIndex,COLORREFcrColor);CBrush(CBitmap*pBitmap);HS_BDIAGONALHS_CROSSHS_DIAGCROSSHS_FDIAGONALHS_HORIZONTALHS_VERTICAL图4-3画刷的填充样式4.5绘图模式intSetROP2(intnDrawMode);nDrawMode:为绘图模式,可以取如下值。·R2_BLACK像素始终为黑色。·R2_WHITE像素始终为白色。·R2_NOP像素保持不变。·R2_NOT像素为屏幕颜色的反色。·R2_COPYPEN像素为笔的颜色。·R2_NOTCOPYPEN像素为笔颜色的反色。·R2_MERGEPENNOT像素为笔颜色或者屏幕颜色反色的组合色。·R2_MASKPENNOT像素为笔颜色与屏幕颜色反色的组合色。·4.5绘图模式intSetROP2(intnDrawMode);nDrawMode:为绘图模式,可以去如下值。·R2_MERGENOTPEN像素为笔颜色反色或者屏幕颜色的组合色。·R2_MASKNOTPEN像素为笔颜色反色与屏幕颜色的组合色。·R2_MERGEPEN像素为笔颜色或者屏幕颜色的组合色。·R2_NOTMERGEPENR2_MERGEPEN的反色。·R2_MASKPEN像素为笔颜色与屏幕颜色的组合色。·R2_NOTMASKPENR2_MASKPEN的反色。·R2_XORPEN像素为笔颜色与或者屏幕颜色异或的颜色。·R2_NOTXORPENR2_XORPEN的反色。4.6文本和CFont类4.6.1显示文本1、文本的显示BOOLTextOut(intx,inty,constCString&str);2、设置文本颜色COLORREFSetTextColor(COLORREFcrColor);COLORREFGetTextColor();COLORREFSetBkColor(COLORREFcrColor);COLORREFGetBkColor();4.6文本和CFont类4.6.1显示文本3、设置文本字符的间距intSetTextCharacterExtra(intnCharExtra);intGetTextCharacterExtra();4.6文本和CFont类4.6.1显示文本4、设置文本的对齐方式UINTSetTextAlign(UINTnFlags);UINTGetTextAlign();nFlags可以取值TA_BASELINETA_BOTTOMTA_CENTERTA_LEFTTA_NOUPDATECTA_RIGHTTA_TOPTA_UPDATECP4.6文本和CFont类4.6.2字体和CFont类typedefstructtagLOGFONT{LONGlfHeight;//字体的逻辑高度LONGlfWidth;//字符的平均逻辑宽度LONGlfEscapement;//倾角LONGlfOrientation;//书写方向LONGlfWeight;//字体的粗细程度BYTElfItalic;//斜体标志BYTElfUnderline;//下划线标志BYTElfStrikeOut;//删除线标志BYTElfCharSet;//字符集,汉字必须为GB2312_CHARSETTCHARlfFaceName[LF_FACESIZE];//字样名称//…}LOGFONT;4.6文本和CF
本文标题:MFC-Windows应用程序设计-第4章-图形
链接地址:https://www.777doc.com/doc-4611534 .html