77范文网 - 专业文章范例文档资料分享平台

VC++6.0入门第五章 图形和文本输出(5)

来源:网络收集 时间:2018-12-29 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

第5章 图形与文本输出

bs. CreateSolidBrush(RGB(255,0,0));//创建一个红色的实心画刷

表5-11 画刷的样式及说明

样式 BLACK_BRUSH DKGRAY_BRUSH GRAY_BRUSH HOLLOW_BRUSH 说明 黑色画刷 深灰色画刷 灰色画刷 空心画刷 样式 LTGRAY_BRUSH NULL_BRUSH WHITE_BRUSH 说明 亮灰色画刷 空画刷 白画刷

(2) 创建带阴影的画刷CreateHatchBrush()函数

bs. CreateHatchBrush(HS_CROSS,RGB(255,0,0));//创建一个十字线阴影的红色画刷

表5-12阴影画刷样式及说明

样式 HS_BDIAGONAL HS_DIAGCROSS HS_FDIAGONAL 45度\\ 45度叉线 45度/ 说明 样式 HS_CROSS HS_HORIZONTAL HS_VERTICAL + _ | 说明

(3) 创建位图画刷CreatePatternBrush()函数

CBitMap bmp;

bmp. LoadBitMap(IDB_MYBITMAP); CBrush bs;

bs. CreatePatternBrush(&bmp);

使用自定义画笔和画刷的方式和使用自定义字体的方法类似,创建自定义对象后,调用SelectObject()函数将对象选入设备上下文即可。

下面的示例中演示了使用和创建画笔和画刷。首先通过使用创建的蓝色,宽度为5的画笔画一个图形的边界,然后用当前的刷子填充这个图形来创建一个填充图形。共有三个填充图形:第一个是用深蓝色实心画刷填充的带圆角的矩形,第二个是用亮灰画刷填充的饼图,第三个是用阴影风格的画刷填充的椭圆。

程序清单5-13:在视图中绘制图形的OnDraw函数 void CExam5View::OnDraw(CDC* pDC) { CExam5Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here pDC->SetMapMode(MM_ANISOTROPIC); //设置映像模式 CPen NewPen,OldPen; //创建蓝色画笔 NewPen.CreatePen(PS_SOLID,5,RGB(0,0,255)); pDC->SelectObject(&NewPen); //将画笔选入设备上下文 CBrush NewBrush1,NewBrush2; //创建深蓝色实心画刷

21

VC++6简明教程

}

NewBrush1.CreateSolidBrush(RGB(0,0,128)); pDC->SelectObject(&NewBrush1); //将画刷选入设备上下文

pDC->RoundRect(200,100,330,200,15,15); //绘制圆角矩形

pDC->SelectStockObject (LTGRAY_BRUSH); //将库存对象亮灰画刷选入设备上下文 pDC->Pie(350,50,420,150,360,50,400,50); //绘制饼图

NewBrush2.CreateHatchBrush (HS_DIAGCROSS,RGB(125,125,125)); //创建阴影画刷

pDC->SelectObject(NewBrush2); //绘制椭圆

pDC->Ellipse (50,50,150,150);

运行效果如图5-12所示。

图5-12创建CGdiObject对象绘图

5.3.5 图形输出编程实例

【例5-3】设置映像和映像模式。编写程序Exam5_3,初始阶段按模式MM_TEXT绘图,在一个圆角矩形内内嵌一个椭圆,圆角矩形以黑色填充,椭圆以白色填充。用户通过单击鼠标来改变映像模式,单击鼠标左键时,设置映像模式为MM_ISOTROPIC,并调用InvalidateRect()函数刷新用户区,在用户单击鼠标右键时,设置映像模式为MM_ANISOTROPIC,同时刷新用户区。运行效果如图5-13所示

22

第5章 图形与文本输出

MM_TEXT MM_ISOTROPIC MM_ANISOTROPIC

图5-13 设置映像模式

1. 使用AppWizard创建一个单文档MFC(EXE程序) 2. 为视图类增加成员变量记录坐标并初始化

(1) 选择WorkSpace的ClassView标签,右键单击CExam5_3View类。

(2) 在弹出的快捷菜单中选择Add Member Variable菜单项,增加int型的公有成员变量m_Mode,

该变量表示采用的映像模式。

(3) 在CExam5_3View类的构造函数CExam5_3View()中将变量m_Mode初始化为MM_TEXT。 3. 在Ondraw()函数中添加代码,绘制图形

程序清单5-14:在视图中绘制图形的OnDraw()函数

void CExam5_3View::OnDraw(CDC* pDC) { CExam5_3Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here pDC->SetMapMode (m_Mode);//设置映像模式 pDC->SetWindowExt(150,150);//设置窗口区域 pDC->SetViewportExt (150,100);//设置视图区域 pDC->SetViewportOrg (50,60);//设置视图原点 pDC->SelectStockObject (BLACK_BRUSH);//将黑色画刷选入设备环境 pDC->RoundRect (0,0,150,150,30,30);//绘制圆角矩形

pDC->SelectStockObject (WHITE_BRUSH);//将白色画刷选入设备环境 pDC->Ellipse (0,10,150,140);//绘制椭圆 }

4. 视图类增加鼠标左键单击的消息映射,修改映像模式为MM_ISOTROPIC,更新视图

(1) 打开ClassWizard,选择Message Map标签,Class Name 列表中选择CExam5_3View,Object IDS

列表中选择CExam5_3View,Messages列表中选择WM_LBUTTONDOWN,单击“Add Function”按钮,添加鼠标左键双击消息映射。

(2) 单击“Edit Code”按钮,添加处理代码,用映像模式MM_ISOTROPIC替换m_Mode的值,并

23

VC++6简明教程

设置无效区域,刷新视图。

程序清单5-15:更换映像模式的鼠标左键单击消息处理函数 void CExam5_3View:: OnLButtonDown(UINT nFlags, CPoint point) {

// TODO: Add your message handler code here and/or call default m_Mode=MM_ISOTROPIC; this->InvalidateRect (NULL,true); CView::OnLButtonDblClk(nFlags, point); }

5. 同样操作在视图类增加鼠标右键单击的消息映射,修改映像模式为MM_ANISOTROPIC,更新视

【例5-4】编写程序Exam5_4完成下面要求:分别调用系统定义的四种笔样式:PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,PS_DASH画出四个圆;然后调用系统定义的6种实画刷画出圆角矩形;调用系统定义的6种阴影画刷画出矩形;调用函数Pie()画一个圆,红黄蓝各占三分之一。运行效果如图5-14所示。

图5-14 使用画笔和画刷

OnDraw ()函数的程序清单如下:

程序清单5-16:在视图中绘制图形的OnDraw()函数

……

#include \#define Pi 3.1415926 ……

void CExam5_4View::OnDraw(CDC* pDC) { CExam5_4Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here

24

第5章 图形与文本输出

pDC->SetMapMode(MM_ANISOTROPIC); pDC->SetWindowExt(300,300); pDC->SetViewportExt(600,600); pDC->SetViewportOrg (0,0); //画四个圆形(笔的样式不同) pDC->SelectStockObject(NULL_BRUSH); CPen NewPen1,NewPen2,NewPen3,NewPen4; NewPen1.CreatePen(PS_DASH,0,RGB(255,0,0));//创建虚线样式红色画笔 pDC->SelectObject(&NewPen1); pDC->Ellipse(0,0,70,70); NewPen2.CreatePen(PS_DASHDOT,0,RGB(0,255,0));//创建点划线样式绿色画笔 pDC->SelectObject(&NewPen2); pDC->Ellipse(25,0,95,70); NewPen3.CreatePen(PS_DASHDOTDOT,0,RGB(0,0,255));//创建双点划线样式蓝色画笔 pDC->SelectObject(&NewPen3); pDC->Ellipse(0,25,70,95); NewPen4.CreatePen(PS_DOT,0,RGB(0,255,255));//创建点线样式天蓝色画笔 pDC->SelectObject(&NewPen4); pDC->Ellipse(25,25,95,95); //画6个圆角矩形(实画刷样式不同) pDC->SelectStockObject(BLACK_PEN); pDC->RoundRect(120,0,165,45,10,10); pDC->SelectStockObject(DKGRAY_BRUSH);//选择深灰色画刷 pDC->RoundRect(165,0,210,45,10,10); pDC->SelectStockObject(GRAY_BRUSH); //选择灰色画刷 pDC->RoundRect(210,0,255,45,10,10);

pDC->SelectStockObject(HOLLOW_BRUSH); //选择虚画刷 pDC->RoundRect(120,45,165,90,10,10); pDC->SelectStockObject(LTGRAY_BRUSH);//选择亮灰色画刷 pDC->RoundRect(165,45,210,90,10,10);

pDC->SelectStockObject(WHITE_BRUSH); //选择白画刷 pDC->RoundRect(210,45,255,90,10,10); //画6个矩形(画刷的阴影样式不同)

pDC->SelectStockObject(BLACK_PEN); CBrush NewBrush1,NewBrush2,NewBrush3,NewBrush4,NewBrush5,NewBrush6; //创建45度左上右下阴影线 NewBrush1.CreateHatchBrush(HS_BDIAGONAL,RGB(200,200,200)); pDC->SelectObject(&NewBrush1); pDC->Rectangle(120,90,165,135); //创建45度交叉线

25

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库VC++6.0入门第五章 图形和文本输出(5)在线全文阅读。

VC++6.0入门第五章 图形和文本输出(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/395611.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: