您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > Visual c++2010第三讲简单图形
Visualc++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••LOGPENlogpen;•logpen.lopnStyle=PS_DASH;•logpen.lopnWidth.x=1;•logpen.lopnWidth.y=1;•logpen.lopnColor=RGB(199,199,199);•pen2.CreatePenIndirect(&logpen);//画笔2••pen3.CreatePen(PS_USERSTYLE|PS_ENDCAP_FLAT,3,RGB(100,120,120));//画笔3••oldpen=(CPen*)pDC-SelectObject(&pen1);•pDC-MoveTo(100,100);//画线•pDC-LineTo(200,200);••pDC-SelectObject(&pen2);•pDC-Arc(&CRect(200,200,400,400),CPoint(200,200),CPoint(200,400));//画圆弧••pDC-SelectObject(&pen3);•POINTpt[4]={{10,10},{15,15},{20,40},{50,70}};•BYTEstyle[4]={{PT_MOVETO},{PT_LINETO},{PT_LINETO},{PT_LINETO}};•pDC-PolyDraw(pt,style,4);//画线••pDC-SelectObject(oldpen);效果图二.绘制形状•FillRect()填充一个矩形•FillSolidRect()用用一单色填充一个矩形•InvertRect()反转一个矩形的颜色•ExtFloodFill()用用当前画刷填充一个区域,提供比FloodFill()成员函数更多的灵活性•FrameRect()画一个矩形的边框•填充属性是使用的是画笔,Brush对象控制怎样填充形状。设备环境用一个HBRUSH句柄指向一个画刷对象。若用MFC创建一个Brush对象,首先要创建一个CBrush类对象.•GetBrushOrg获取当前画刷的起点•SetBrushOrg指定选入设备上下文的下一个画刷的起点•FillRgn()填充一个区域•InvertRgn()反转一个区域的颜色•FrameRgn()画一个特定区域的边框实例二•CBrush*oldbrush,brush1,brush2,brush3;•brush1.CreateSolidBrush(RGB(100,100,100));•brush2.CreateHatchBrush(HS_CROSS,RGB(200,200,200));•LOGBRUSHlogbrush;•logbrush.lbStyle=BS_HOLLOW;•//logbrush.lbColor=;•//logbrush.lbHash=;•brush3.CreateBrushIndirect(&logbrush);••//Oldbrush=(CBrush*)pDC-SelectObeject(&brush1);•pDC-FillRect(&CRect(0,0,100,100),&brush1);•pDC-FillSolidRect(&CRect(100,100,200,200),RGB(20,20,20));•pDC-InvertRect(&CRect(100,100,200,200));•实例二(续)•oldbrush=(CBrush*)pDC-SelectObject(&brush1);•pDC-Rectangle(&CRect(200,200,250,250));•pDC-SelectObject(&brush2);•pDC-Rectangle(&CRect(250,250,300,300));•pDC-DrawEdge(&CRect(300,300,350,350),EDGE_ETCHED|BDR_SUNKENOUTER|BDR_RAISEDINNER,BF_RECT);•pDC-Draw3dRect(&CRect(350,350,400,400),RGB(20,20,20),RGB(200,200,200));•pDC-SelectObject(&brush3);•pDC-DrawFocusRect(&CRect(400,400,450,450));••pDC-DrawFrameControl(&CRect(400,0,500,100),DFC_BUTTON,DFCS_ADJUSTRECT|DFCS_BUTTON3STATE|DFCS_MONO);•pDC-SelectObject(oldbrush);••绘制文本之一•TextOut()在在一个指定的位置,输出一个字符串•ExtTextOut()在在一个矩形区域里输出一个字符串•TabbedTextOut()在基于用该函数传输的一个表,在指定位置输出一个字符串,并将字符串中的任何制表符转换为空格•DrawText()在在指定的矩形域里绘制文本,但比TextOut()有更多的选项,如把文本居中和显示多行文本••文本属性控制怎样绘制文本。有三种类型的文本属性:颜色、对齐方式和字体•文本颜色的颜色可以使用函数•SetTextColor()设定前景色(即文本色)•SetBkColor()设置输出文本处的背景色。绘制文本之二•文本的对其方式;对齐方式属性决定文本怎样排列(如:左对齐、右对齐、中央对齐)。确切地说,TextOut()函数中的x、y变量可以表示文本的左边、右边或者底部。使用默认的对齐方式,x、y代表文本的左上角,但还有其他一些方式。要改变设备环境的文本对齐属性,可以用SetTextAlign()函数和下面的标志值之一:•TA_LEFT儿TextOut()中的x变量表示文本的左边。TA_LEFT是默认设置值•TA_TOP儿TextOut()中的y变量表示文本的顶部。TA_TOP是默认设置值•TA_RIGHT儿TextOut()中的y变量表示文本的右边。计算文本的边界矩形,用以决定从哪儿开始绘制文本•TA_CENTER儿TextOut()中的y变量表示文本的中部•TA_BASELINE儿TextOut()中的y变量表示文本的基线•TA_BOTTOM儿TextOut()中的y变量指示文本的底部••virtualintDrawText(LPCTSTRlpszString,ininCount,LPRECTlpRect,UINTnForm-at);•intDrawText(constCstring&str,LPRECTlpRect,UNITnFormat);//如果成功,则返回文本高度。绘制文本之三•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后,也关闭了这种处理。lDT_PATH_ELLIPSISlDT_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一同使用。实例三•CStringstr=_T(11111111111111111111111“);•CRectrect;•rect.top=200;•rect.left=200;•rect.bottom=250;•rect.right=250;•pDC-DrawText(str,&rect,DT_LEFT|DT_END_ELLIPSIS)//多出的字符用…显示实例四•CRectRect;•GetWindowRect(&Rect);•CFontMyFont;•MyFont.CreateFont(24,0,0,0,FW_BOLD,true,FALSE,0,0,0,0,0,0,_T(Arial“));•CStringStrInfo=_T(创建立体效果的字符串“);•pDC-SetBkMode(TRANSPARENT);•CFont*pOldFont=pDC-SelectObject(&MyFont);•COLORREFOldColor=pDC-SetTextColor(::GetSysColor(COLOR_3DHILIGHT));实例四续•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
本文标题:Visual c++2010第三讲简单图形
链接地址:https://www.777doc.com/doc-3970339 .html