VC++6简明教程
NewBrush2.CreateHatchBrush(HS_DIAGCROSS,RGB(200,200,200)); pDC->SelectObject(&NewBrush2); pDC->Rectangle(165,90,210,135); //创建45度左下右上阴影线线
NewBrush3.CreateHatchBrush(HS_FDIAGONAL,RGB(200,200,200)); pDC->SelectObject(&NewBrush3); pDC->Rectangle(210,90,255,135); //创建垂直相交阴影线 NewBrush4.CreateHatchBrush(HS_CROSS,RGB(200,200,200)); pDC->SelectObject(&NewBrush4); pDC->Rectangle(120,135,165,175); //创建水平阴影线
NewBrush5.CreateHatchBrush(HS_HORIZONTAL,RGB(200,200,200)); pDC->SelectObject(&NewBrush5); pDC->Rectangle(165,135,210,175); //创建垂直阴影线
NewBrush6.CreateHatchBrush(HS_VERTICAL,RGB(200,200,200)); pDC->SelectObject(&NewBrush6); pDC->Rectangle(210,135,255,175); //画饼图
pDC->SelectStockObject(BLACK_PEN); CBrush RedBrush,BlueBrush,YellowBrush; RedBrush.CreateSolidBrush(RGB(255,0,0)); pDC->SelectObject (&RedBrush); pDC->Pie(10,100,100,190, (int)(55+45*cos(2*Pi/3)),(int)(145+45*sin(2*Pi/3)), (int)(55+45*cos(0)),(int)(145+45*sin(0))); BlueBrush.CreateSolidBrush(RGB(0,255,255)); pDC->SelectObject (&BlueBrush); pDC->Pie(10,100,100,190, (int)(55+45*cos(4*Pi/3)),(int)(145+45*sin(4*Pi/3)), (int)(55+45*cos(2*Pi/3)),(int)(145+45*sin(2*Pi/3))); YellowBrush.CreateSolidBrush(RGB(255,255,0)); pDC->SelectObject (&YellowBrush); pDC->Pie(10,100,100,190, (int)(55+45*cos(0)),(int)(145+45*sin(0)), (int)(55+45*cos(4*Pi/3)),(int)(145+45*sin(4*Pi/3))); }
26
第5章 图形与文本输出
实验 实验1:
设计一个窗口,在窗口中输出一行文字,每一行的文字相继出现后又消失,而且每一行文字的字体按\楷体_GB2312\、\宋体\、\隶书\、\黑体\、\幼圆\循环变化,字号由8到50线性增长,颜色由RGB(0,0,0) 到RGB(255,0,0)线性增长,运行效果如图5-15所示:
图5-15 Ex5_1 运行效果
实验步骤:
1. 使用AppWizard创建一个单文档MFC(EXE程序) Ex5_1 2. 视图类增加成员变量记录坐标并初始化
(1) 选择WorkSpace的ClassView标签,右键单击CEx5_1View类。
(2) 在弹出的快捷菜单中选择Add Member Variable菜单项,按下表增加公有成员变量。
表5-13
变量类型 int int CString int int int 变量名 nColorSign; nFirst; OutStr; nFontSign; OutStrLen; nFontHeight; 0 0 风声雨声读书声声声入耳 0 OutStr .GetLength() 8 初始值 说明 控制颜色值 文本串开始位置 输出文本串 控制字体 文本串长度 字体大小
(3) 在CEx5_1View类的构造函数CEx5_1View()中为表中变量设定初始化值。 3. 在OnDraw()函数中添加代码,设定颜色字体并输出文本串
程序清单5-17:在视图中输出文本串的OnDraw()函数 void CEx5_1View::OnDraw(CDC* pDC) { CEx5_1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
27
VC++6简明教程
// TODO: add draw code for native data here pDC->SetTextColor (nColorSign%5);//根据nColorSign线性设置颜色 CString chfont; // 表示字体 switch(nFontSign%5)//根据nFontSign的值选择字体 {case 0:chfont=\楷体_GB2312\ case 1:chfont=\宋体\ case 2:chfont=\隶书\ case 3:chfont=\黑体\ case 4:chfont=\幼圆\ } CFont NewFont; //创建新字体 NewFont.CreateFont (nFontHeight,10,0,0,0,false,false,false, GB2312_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, chfont);
pDC->SelectObject (NewFont); //输出从nFirst开始的文本串 pDC->TextOut(100,150, OutStr.Mid(nFirst)); }
4. 设定定时器,使文本串从左到右滚动,并改变颜色和字体
(1) 打开ClassWizard,选择Message Map标签,Class Name列表中选择CEx5_1View,Object IDS
列表中选择CEx5_1View,Messages列表中选择OnActiveView,单击“Add Function”按钮。 (2) 单击“Edit Code”按钮,添加处理代码,设置定时器。
程序清单5-18:设置定时器
void CEx5_1View::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) { // TODO: Add your specialized code here and/or call the base class SetTimer( 1, 350, NULL); CView::OnActivateView(bActivate, pActivateView, pDeactiveView); }
(3) 打开ClassWizard,选择Message Map标签,Class Name 选择列表中CEx5_1View,Object IDS
列表中选择CEx5_1View,Messages列表中选择WM_TIMER,单击“Add Function”按钮。 (4) 单击“Edit Code”按钮,添加处理代码,实现动态文本串。
28
第5章 图形与文本输出
程序清单5-19:实现动态文本串
void CEx5_1View::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default nFirst=nFirst+2; //设置文本串开始位置,向前走一个汉字 if(nFirst>=OutStrLen)//文本串开始位置归0,并修改字体和颜色 { nFirst=0; nColorSign+=20; nFontSign++; if(nFontHeight==40) nFontHeight=8; else nFontHeight=nFontHeight+8; } this->Invalidate (true); CView::OnTimer(nIDEvent); }
5. 编译并运行程序
实验2:
编写程序Ex5_2实现以下功能:程序运行时,窗口显示字符串信息;在窗口中双击鼠标左键时,更新显示的字符串内容和位置,同时在窗口中央显示一组同心圆;然后在窗口中双击鼠标右键时,清除窗口中显示的同心圆,返回程序启动时的状态。操作要求如下:
(1) 当程序启动时,在窗口的左下角显示信息“双击鼠标左键,,显示同心圆”。如图5-16所示。 (2) 在窗口双击鼠标左键时,窗口中心显示一组同心圆,半径依次为120, 80和40个像素;在窗口
的右下角显示信息“双击鼠标右键,清除同心圆”。如图5-17 所示。 (3) 双击鼠标右键后,窗口回到启动时的状态。
(4) 反复双击鼠标的左键和右键,窗口状态反复变化。
图5-16 图5-17
29
VC++6简明教程
实验步骤:
1. 使用AppWizard创建一个单文档MFC(EXE程序)
(1) 在Visual C++主菜单栏中选择File->New菜单项,打开New对话框 。
(2) 选择Project标签,并在该标签页中选择MFC AppWizard(exe)选项,在Project name编辑框中
输入工程文件名为Ex5_2,单击OK。
(3) 在MFCAppWizard-Step1对话框中,选择“Single Document”选项,工程的语言采用中文。 (4) 在MFCAppWizard-Step4对话框中,取消对工具栏、状态栏以及打印和打印预览的支持。单击
“Finish”完成应用程序框架文件的创建。
2. 视图类增加int型公有成员变量m_flag,并在构造函数中初始化为0
3. 在OnDraw()函数中添加代码,在窗口中实现文本串输出,并调用绘图实现绘图 操作要求如下:
(1) 当m_flag为0时,在窗口的左下角显示信息“双击鼠标左键,显示同心圆”。 (2) 当m_flag为1时,在窗口的右下角显示信息“双击鼠标右键,清除同心圆”。并且在窗口的中
央绘制一组同心圆,半径依次为120,80,40。 参考程序如下:
程序清单5-20:在视图中央绘制同心圆的OnDraw函数
void CEx5_2View::OnDraw(CDC* pDC) { CEx5_2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rect; this->GetClientRect(rect); //获得当前客户区 if(m_flag) { //在客户区的右下角输出文本串 pDC->TextOut(rect.Width()-200 ,rect.Height()-20,\双击鼠标右键清除同心圆\ // 设置客户区中心位置为原点 pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2); //输出同心圆 pDC->Ellipse(-120,-120,120,120); pDC->Ellipse(-80,-80,80,80); pDC->Ellipse(-40,-40,40,40); } else pDC->TextOut(0,rect.Height()-20,\双击鼠标左键,显示同心圆\ }
4. 为视图类增加鼠标左键双击的消息映射,修改m_flag 的值为1,更新视图
(1) 打开ClassWizard,选择Message Map标签,Class Name 列表中选择CEx5_2View,Object IDS
列表中选择CEx5_2View,Messages列表中选择WM_LBUTTONDBLCLK,单击“Add Function”按钮,添加鼠标左键双击消息映射。
(2) 单击“Edit Code”按钮,添加处理代码,修改m_flag的值为1,并设置无效区域,刷新视图。
30
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库VC++6.0入门第五章 图形和文本输出(6)在线全文阅读。
相关推荐: