Visualc2010第三讲简单图形.ppt_第1页
Visualc2010第三讲简单图形.ppt_第2页
Visualc2010第三讲简单图形.ppt_第3页
Visualc2010第三讲简单图形.ppt_第4页
Visualc2010第三讲简单图形.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Visual c+2010第三讲简单图形绘制,主讲 朱世华,一 画线,1.1 基本知识 MoveTo( ) 开始画线、弧和多边形时,把光标移动到一个初始位置 LineTo( ) 画一条从初始位置到另一个点的直线 Arc( ) 画一段弧 ArcTo( ) 画一段弧,并更新初始位置 AngleArc( ) 画一条线,然后画一段弧,并更新初始位置 PolyDraw( ) 画一系列线段和Bezier样条 PolyLine( ) 画一系列线段 PolyPolyLine( ) 画多个系列线条 画线属性是通过画笔的属性来控制,1.2 实例 CPen *oldpen,pen1,pen2,pen3; pen1.CreatePen(PS_SOLID,2,RGB(255,0,0);/画笔1 LOGPEN logpen; logpen.lopnStyle = PS_DASH; logpen.lopnWidth.x = 1; logpen.lopnWidth.y = 1; logpen.lopnColor = RGB(199,199,199); pen2.CreatePenIndirect(/画笔3,oldpen = (CPen *)pDC-SelectObject(,效果图,二.绘制形状,FillRect( ) 填充一个矩形 FillSolidRect( ) 用用一单色填充一个矩形 InvertRect( ) 反转一个矩形的颜色 ExtFloodFill( ) 用用当前画刷填充一个区域,提供比FloodFill( )成员函数更多的灵活性 FrameRect( ) 画一个矩形的边框 填充属性是使用的是画笔, B r u s h对象控制怎样填充形状。设备环境用一个H B R U S H句柄指向一个画刷对象。若用M F C创建一个B r u s h对象,首先要创建一个C B r u s h类对象. GetBrushOrg获取当前画刷的起点 SetBrushOrg指定选入设备上下文的下一个画刷的起点 FillRgn( ) 填充一个区域 InvertRgn( ) 反转一个区域的颜色 FrameRgn( ) 画一个特定区域的边框,实例二,CBrush *oldbrush,brush1,brush2,brush3; brush1.CreateSolidBrush(RGB(100,100,100); brush2.CreateHatchBrush(HS_CROSS,RGB(200,200,200); LOGBRUSH logbrush; logbrush.lbStyle = BS_HOLLOW; /logbrush.lbColor = ; /logbrush.lbHash = ; brush3.CreateBrushIndirect(,实例二(续),oldbrush = (CBrush*)pDC-SelectObject(,绘制文本之一,TextOut( ) 在在一个指定的位置,输出一个字符串 ExtTextOut( ) 在在一个矩形区域里输出一个字符串 TabbedTextOut( ) 在基于用该函数传输的一个表,在指定位置输出一个字符串,并将字符串中的任何制表符转换为空格 DrawText( ) 在在指定的矩形域里绘制文本,但比TextOut( )有更多的选项,如把文本居中和显示多行文本 文本属性控制怎样绘制文本。有三种类型的文本属性:颜色、对齐方式和字体 文本颜色的颜色可以使用函数 SetTextColor( ) 设定前景色(即文本色) SetBkColor( ) 设置输出文本处的背景色。,绘制文本之二,文本的对其方式; 对齐方式属性决定文本怎样排列(如:左对齐、右对齐、中央对齐)。确切地说, TextOut( )函数中的x、y变量可以表示文本的左边、右边或者底部。使用默认的对齐方式, x、y代表文本的左上角,但还有其他一些方式。要改变设备环境的文本对齐属性,可以用SetTextAlign( )函数和下面的标志值之一: TA _ LEFT 儿TextOut( )中的x变量表示文本的左边。TA _ L E F T是默认设置值 TA _ TOP 儿TextOut( )中的y变量表示文本的顶部。TA _ TO P是默认设置值 TA _ RIGHT 儿TextOut( )中的y变量表示文本的右边。计算文本的边界矩形,用以决定从哪儿开始绘制文本 TA _ CENTER 儿TextOut( )中的y变量表示文本的中部 TA _ BASELINE 儿TextOut( ) 中的y变量表示文本的基线 TA _ BOTTOM 儿TextOut( )中的y变量指示文本的底部 virtual int DrawText(LPCTSTR lpszString,ini nCount ,LPRECTlpRect,UINT nForm-at); int DrawText(const Cstring/ 如果成功,则返回文本高度。,绘制文本之三,lpszString指向要绘制的文本的指针。如果nCount是-1,该字符串必须是空终止的。NCount字符串中字符数目。如果为-1,lpszString被认为是一个指向空终止的字符串的长指针。DrawText自动计算字符数目。LpRect指向RECT结构或Crect对象的指针,结构(或对象)中包含有矩形(逻辑单位表示),其中的文本带有格式。 NFormat指定格式化文本的方法。它可以是下列值的组合(可用运算符或位操作符进行组合): DT_BOTTOM 底部对齐的文本。该值必须同DT_SINGLELINE组合使用。 DT_CALCRECT 决定矩形的宽度和高度,如果是多行文字,DrawText将会使用lpRect指向的矩形,并扩展矩形以容纳文本。如果是单行文本,DrawText将会调整矩形的右边以便容纳该行文字。两种情况下,DrawText都返回格式化文本的高度,但并不绘制它们。,绘制文本之三,DT_CENTER 将文本水平居中。 DT_END_ELLIPSIS或DT_PATH _ELLIPSIS 如果必要,将用椭圆替代部分指定的文本,以便适合给定的矩形。除非指定DT_MODIFYSTRING 标志,否则给定的字符串不会被修改。可以指定DT_END_ELLIPSIS在字符串末端替代字符,或者指定DT_PATH_ELLIPSIS在字符串中间替代字符。如果字符串中含有反斜杠(),DT_PATH_ELLIPSIS将尽可能保存在最后一个反斜杠后的文本。 DT_EXPANDTABS 扩展制表符,每一制表符所含字符的缺省数目是8。 DT_EXTERNALLEADING包括在行高中的字体外部间隔。通常外部间隔不包括在一行文本的高度之中。 DT_LEFT 文本左对齐。,绘制文本之四,lDT_MODIFYSTRING 修正给定字符串以便与显示文本匹配。只有在指定DT_END_ELLIPSIS 或DT_ PATH_ELLIPSIS 标志时,该标志才起作用。 DT_NOCLIP 绘制但不剪切, DrawText 在使用DT_NOCLIP后总能运行得快一些。 DT_NOPREFIX 关闭前缀字符,通常DrawText 将助记前缀&理解为其后字符加上下划线,&前缀符表示显示一个&字符,指定 DT_NOPREFIX后,也关闭了这种处理。l DT_PATH_ELLIPSISl DT_RIGHT 文本右对齐。 DT_SINGLELING 指定单行,回车与换行不会中断该行。 DT_TABSTOP 设置制表位,nFormat的高位字节即为每一制表符所含字符的数目,缺省值为8。,绘制文本之五,DT_TOP 文本靠上对齐(只用于单行文字)。 DT_VCENTER 垂直居中对齐(只用于单行文字)。 DT_WORDBREAK 设定单词中断。如果超过lpRect指定的矩形边界,行会自动在词间断开,回车与换行也会断行。 注意 DT_CALCRECT,DT_EXTERNALLEADING,DT_INTERNAL,DT_NOCLIP和DT_NOPREFIX不能与DT_TABSTOP一同使用。,实例三,CString str =_T( “11111111111111111111111“); CRect rect; rect.top = 200; rect.left = 200; rect.bottom = 250; rect.right = 250; pDC-DrawText(str,&rect,DT_LEFT|DT_END_ELLIPSIS)/多出的字符用显示,实例四,CRect Rect; GetWindowRect(,实例四续,Rect.right=Rect.Width(); Rect.bottom=Rect.Height(); Rect.left=Rect.top=0; pDC-FillSolidRect(Rect,:GetSysColor(COLOR_3DFACE); pDC-DrawText(StrInfo,Rect+CPoint(0,1),DT_SINGLELINE|DT_LEFT); pDC-SetTextColor(:GetSysColor(COLOR_3DSHADOW); pDC-DrawText(StrInfo,Rect,DT_SINGLELINE|DT_LEFT); pDC-SetTextColor(OldColor); pDC-SelectObject(pOldFont);,实例五,CFont MyFont; /声明逻辑字体变量MyFont CFont* pOldFont; CRect rect; /定义矩形变量rect,保存客户区域 CString caption=_T(“TextOut()函数输出的透明库存字体OEM_FIXED_FONT!“); pDC-SelectStockObject(OEM_FIXED_FONT); /选择库存字体 GetClientRect(rect);/取得客户区的区域保存到rect中,pDC-SetTextAlign(TA_BASELINE); /设置文本的对齐方式为“将点与所选字体的基线对齐“ pDC-SetBkMode(TRANSPARENT);/设置背景模式不透明 pDC-SetTextColor(RGB(255,0,0);/设置文本颜色为红色 pDC-SetBkColor(RGB(0,0,255);/设置文本背景颜色为蓝色 pDC-TextOut(rect.right/6,rect.bottom/6,caption);/输出文本,MyFont.CreatePointFont(140, _T(“Arial“); /由CreatePointFont函数直接创建一种逻辑字体 pOldFont = pDC-SelectObject(,CString caption1=_T(“用CreatePointFont创建、ExtTextOut输出的不透明的Arial字!“); pDC-ExtTextOutW(currentX,currentY,ETO_OPAQUE, CRect(currentX,currentY-30,currentX+300,currentY+30), caption1,caption1.GetAllocLength(),NULL); /在指定的矩形内不透明显示文本 pDC-SelectObject(pOldFont);/恢复系统先前的字体,绘制位图和图标,DrawIcon 在在指定的位置画一个图标 BitBlt 在 从指定的设备环境中拷贝一个位图,通常是从磁盘中装入或在内存中创建,如前面所述 StretchBlt 在 与BitBlt( )基本相同,但它试图伸展或压缩一个位图以适应目标 PlgBlt 从源设备上下文的指定矩形到给定设备上下文中指定平行多边形,执行颜色数据位的位块传递 FloodFill 用当前画刷填充区域 ExtFloodFill 用当前画刷填充区域。比FloodFill成员函数提供更多灵活性MaskBlt使用给定屏蔽和光栅操作对源和目标位图合并颜色数据,绘制位图和图标,PatBlt 创建位特征 MaskBlt 使用给定屏蔽和光栅操作对源和目标位图合并颜色数据 实例1: HICON hicon = AfxGetApp()-LoadStandardIcon(MAKEINTRESOURCE(IDI_QUESTION); pDC-DrawIcon(0,0,hicon); BOOL BitBlt(int x,int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, intySrc, DWORD dwRop); x指定目标矩形左上角的逻辑X坐标。Y指定目标矩形左上角的逻辑Y坐标。NWidth指定目标矩形和源位图的宽度(逻辑单位)。NHeight指定目标矩形和源位图的高度(逻辑单位)。PSrcDC指向CDC对象的指针,标识待拷贝位图的设备上下文。如果dwRop指定不包括源的光栅操作,则它必须为NULL。XSrc指定源位图左上角的逻辑X坐标。YSrc指定源位图左上角的逻辑Y坐标。,绘制位图和图标,DwRop指定要执行的光栅操作。光栅操作代码定义GDC如何合并输出操作中的颜色,包括当前画刷、可能的源位图和目标位图。下面对dwRop列出光栅操作代码及其描述: BLACKNESS 所有输出变黑。 DSTINVERT 反转目标位图。 MERGECOPY 使用布尔AND操作符合并特征与源位图。 MERGEPAINT 使用布尔OR操作符合并特征与源位图。 NOTSRCCOPY 拷贝反转源位图到目标。,绘制位图和图标,NOTSRCERASE 反转使用布尔OR操作符合并源和目标位图的结果。 PATCOPY 拷贝特征到目标位图。 PATINVERT 使用布尔XOR操作符合并目标位图和特征。 PATPAINT 使用布尔OR操作符合并反转源位图和特征。用布尔OR操作符合并这项操作结果与目标位图。 SRCAND 使用布尔AND操作符合并目标像素和源位图。 SRCCOPY 拷贝源位图到目标位图。 SRCERASE 反转目标位图并用布尔AND操作符合并这个结果和源位图。,绘制位图和图标,SRCINVERT 使用布尔XOR操作符合并目标像素和源位图。 SRCPAINT 使用布尔OR操作符合并目标像素和源位图。 WHITENESS 所有输出变白。 CDC *memDC = new CDC; memDC-CreateCompatibleDC(pDC); CBitmap bitmap; bitmap.CreateCompatibleBitmap(pDC,20,20); memDC-SelectObject( lpPoint逻辑空间中包含三个点的数组的指针。它指定了一个目标平行四边形的三个顶点。源矩形的左上角与数组中的第一个点映射,右上角与第二个点映射,第三个点指向左下角。源矩形的右下角与平行四边形未能明确表示的第四点映射。,绘制位图和图标,pSrcDC源设备上下文的标识。xSrc用逻辑单位表示的源矩形左上角的X坐标。 ySrc用逻辑单位表示的源矩形左上角的Y坐标。nWidth用逻辑单位表示的源矩形的宽度。nHeight用逻辑单位表示的源矩形的高度。maskBitmap标识用以屏蔽源矩形颜色的可选的黑白位图。xMask黑白位图左上角的X坐标。yMask黑白位图左上角的Y坐标。,绘制位图和图标,对源设备上下文指定的矩形到给定设备上下文中平行四边形的颜色数据实行位块(bit-block)转换。如果位掩码的句柄代表一个有效的位图,函数利用该函数对源矩形的颜色数据位进行屏蔽。平行四边形的第四个顶点(D)是将前三个点(A,B,C)定义为矢量后,经D=B+C-A计算得到。如果存在位掩码1,表示源像素色将会拷贝给目标位图,为0表示目标位图的像素不会被改变。如果掩码矩形小于源矩形和目标矩形,函数将复制掩码模式。 在源设备上下文中允许度量形式转换和解释。但不允许选择和剪切转换,掩码位图不是黑白位图,出错。目标设备上下文的扩展模式决定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论