vc可视化实验2.docx

上传人:b****3 文档编号:12889592 上传时间:2023-04-22 格式:DOCX 页数:15 大小:424.60KB
下载 相关 举报
vc可视化实验2.docx_第1页
第1页 / 共15页
vc可视化实验2.docx_第2页
第2页 / 共15页
vc可视化实验2.docx_第3页
第3页 / 共15页
vc可视化实验2.docx_第4页
第4页 / 共15页
vc可视化实验2.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

vc可视化实验2.docx

《vc可视化实验2.docx》由会员分享,可在线阅读,更多相关《vc可视化实验2.docx(15页珍藏版)》请在冰豆网上搜索。

vc可视化实验2.docx

vc可视化实验2

实验二:

MFC曲线绘制实验

学号:

2011329700214姓名:

周咪咪班级:

11数媒

(2)班

一、实验目的

1.了解Windows图形处理的基本原理。

2.掌握Windows图形和文本输出。

二、实验内容

1.MFC曲线绘制实现

三、实验步骤及源代码

1.创建MFC应用程序框架

打开VC6.0,使用MFCAppWizard[exe]向导创建MFC应用程序sy2框架,选择单文档应用程序,其它默认。

2.添加菜单项

选择项目工作区的资源视图,展开menu文件夹,双击菜单资源IDR_MAINFRAME,打开菜单编辑器。

在主菜单【帮助】的后面添加3个菜单项【曲线】、【线宽】和【颜色】,并分别给它们添加子菜单(设置其Caption(菜单项名称)、ID、Prompt(提示))。

3.创建快捷菜单

(1)在ResourceView菜单中右击Menu,选择InsertMenu,将新创建的资源命名为IDR_MENU_POP。

然后按照要求为快捷菜单依次添加菜单项,将菜单项设置到对应的ID。

(2)添加代码

在sy2_1View.h中CSy2_1View类内部添加如下代码,声明快捷菜单中对应的变量。

CMenum_PopMenu;//Pop_up快捷菜单

在sy2_1View.cpp中添加如下代码:

CSy2_1View:

:

CSy2_1View()

{

//TODO:

addconstructioncodehere

m_PopMenu.LoadMenu(IDR_MENU_POP);//创建并加载菜单资源

}

CSy2_1View:

:

~CSy2_1View()

{

m_PopMenu.DestroyMenu();//释放菜单资源

}

在ResourseView中的CSy2_1View选择WM_RBUTTONDOWN添加消息处理函数OnRButtonDown*().

voidCSy2_1View:

:

OnRButtonDown(UINTnFlags,CPointpoint)//新加消息处理函数

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

CMenu*m_pPop=NULL;//用m_pPop这个指针去获取m_Popmenu这个菜单m_pPop=m_PopMenu.GetSubMenu(0);

this->ClientToScreen(&point);//将坐标由客户坐标转化为屏幕坐标

m_pPop->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);//显示菜单

CView:

:

OnRButtonDown(nFlags,point);

}

编译运行程序,结果如下:

4.创建工具栏

(1)首先单击ResourceView,选择Toolbar,然后单击鼠标右键,在弹出的快捷菜单中选择InsertToolbar,将新加入的工具条资源重新命名为IDR_TOOLBAR_NEW。

绘制4个按钮,并设置相应ID。

(2)添加代码

在MainFrm,h中添加代码,声明一个CToolBar变量:

CToolBarm_wndToolBarNew;//声明CToolBar变量,新建工具条

在Main.Frm.cpp文件的CMainFrame:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)函数中添加代码:

if(!

m_wndToolBarNew.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP//先用CreateEx函数创建一个工具条

|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||

!

m_wndToolBarNew.LoadToolBar(IDR_TOOLBAR_NEW))//通过LoadToolBar函数将创建的工具条与指定资源(新建的工具条资源)绑定

{

TRACE0("Failedtocreatetoolbar\n");

return-1;//failtocreate

}

编译运行程序,结果如下:

5.添加成员变量及成员函数

(1)选择项目工作区中的类视图,右击CSy5View,光标移至添加,分别添加成员变量及成员函数。

(2)在构造函数中初始化成员变量:

Csy2View:

:

Csy2View()

{

m_typ=0;//初始时窗口中不显示曲线

m_col=RGB(0,0,0);//颜色初始为黑色

m_wid=1;//线宽初始为1

m_able=0;//初始时除“正弦”和“余弦”菜单项外,新增的其他菜单项均//为不可用

}

(3)添加成员函数代码

打开sy2View.h文件,在类的定义前面添加代码:

constdoublePI=3.1416;

打开sy2View.cpp文件,添加如下文件包含代码:

#include"math.h"

#include"MainFrm.h"

为上表中各成员函数添加代码:

doubleCsy25View:

:

calsin(intx)

{

doubley;

y=sin(x*PI/180);//计算正弦

returny;

}

doubleCsy2View:

:

calcos(intx)

{

doubley;

y=cos(x*PI/180);//计算余弦

returny;

}

voidCsy2View:

:

drawline(CDC*pDC,intx1,inty1,intx2,inty2)

{

pDC->MoveTo(x1,y1);

pDC->LineTo(x2,y2);

}

voidCsy2View:

:

drawaxis(CDC*pDC)//坐标函数

{

CStringstr;

CFontmyfont,*oldfont;

myfont.CreatePointFont(80,"Arial",pDC);//定义坐标刻度字体

oldfont=pDC->SelectObject(&myfont);

drawline(pDC,50,10,50,290);//绘制Y轴

drawline(pDC,45,150,780,150);//绘制X轴

for(inti=50;i<780;i=i+90)

{

drawline(pDC,i,145,i,150);//绘制X轴上刻度线

str.Format("%d",i-50);

if((i-50)!

=0)pDC->TextOut(i,155,str);//输出X轴上刻度值

}

for(i=0;i<11;i++)//绘制Y轴上刻度线,输出刻度值

{

drawline(pDC,50,50+20*i,55,50+20*i);

str.Format("%.2f",1-0.2*i);

if(i!

=5)pDC->TextOut(15,45+20*i,str);

elsepDC->TextOut(15,45+20*i,"0");

}

pDC->SelectObject(oldfont);

myfont.DeleteObject();

}

voidCsy2View:

:

drawcurve(CDC*pDC)

{

drawaxis(pDC);//调用成员函数绘制坐标系

CPointpoint[750];

CPenmypen,*oldpen;

mypen.CreatePen(PS_SOLID,m_wid,m_col);//创建实线画笔、线宽及颜//色由参数m_wid和m_col确定

oldpen=pDC->SelectObject(&mypen);

for(inti=0;i<722;i++)

{

point[i].x=i+50;

if(m_typ==1)//根据参数m_typ的值确定曲线类型

point[i].y=(int)(150-calsin(i)*100);

elseif(m_typ==2)

point[i].y=(int)(150-calcos(i)*100);

}

for(i=0;i<721;i++)

drawline(pDC,point[i].x,point[i].y,point[i+1].x,point[i+1].y);

//调用函数绘制曲线

pDC->SelectObject(oldpen);

mypen.DeleteObject();

}

6.建立消息映射

(1)分别为菜单项【正弦】、【余弦】、【线宽2】、【线宽3】、【红色】和【蓝色】添加COMMAND及UPDATE_COMMAND_UI消息处理函数。

(2)添加代码

在消息处理函数中添加如下代码:

voidCsy2View:

:

OnSin()

{

m_typ=1;//选择正弦曲线

m_able=1;//不可用菜单项变为可用

Invalidate();//更新视窗

}

voidCsy2View:

:

OnCos()

{

m_typ=2;

m_able=1;

Invalidate();

}

voidCsy2View:

:

OnColr()

{

m_col=RGB(255,0,0);//选择红色

Invalidate();

}

voidCsy2View:

:

OnColb()

{

m_col=RGB(0,0,255);

Invalidate();

}

voidCSy5View:

:

OnWidsp2()

{

m_wid=2;//设置线宽为2

Invalidate();

}

voidCsy2View:

:

OnWidsp3()

{

m_wid=3;

Invalidate();

}

voidCsy2View:

:

OnUpdateColb(CCmdUI*pCmdUI)

{

pCmdUI->Enable(m_able);//“红色”菜单项变为可用

if(m_col==RGB(0,0,255))

pCmdUI->SetCheck(true);//“红色”菜单项加标记

else

pCmdUI->SetCheck(false);

}

voidCSy5View:

:

OnUpdateColr(CCmdUI*pCmdUI)

{

pCmdUI->Enable(m_able);

if(m_col==RGB(255,0,0))

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(false);

}

voidCsy2View:

:

OnUpdateWidsp2(CCmdUI*pCmdUI)

{

pCmdUI->Enable(m_able);

if(m_wid==2)

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(false);

}

voidCsy2View:

:

OnUpdateWidsp3(CCmdUI*pCmdUI)

{

pCmdUI->Enable(m_able);

if(m_wid==3)

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(false);

}

7.把drawcurve(pDC)添加到OnDraw(CDC*pDC)函数中实现坐标的绘制。

voidCSy2View:

:

OnDraw(CDC*pDC)

{

CSy2Doc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

//TODO:

adddrawcodefornativedatahere

drawcurve(pDC);//将drawcurve函数添加到Ondraw函数中,Ondraw是初始化画图

}

8.添加状态栏操作代码

(1)打开MainFrm.cpp文件,将系统默认的状态栏对象m_wndStatusBar的访问类型改为Public。

(2)在状态栏静态数组中添加ID_INDICATOR_PROMPT,并在字符串编辑器中设置其属性,手工建立ID_INDICATOR_PROMPT的UPDATE_COMMAND_UI消息映射。

(3)首先,选择项目工作区的ClassView视图,双击CSy5View类,打开其头文件Sy5View.h,在消息处理函数的声明宏中添加代码。

afx_msgvoidOnUpdatePrompt(CCmdUI*pCmdUI);

(4)然后,打开Sy5View.cpp文件,在其消息映射表中添加代码。

ON_UPDATE_COMMAND_UI(ID_INDICATOR_PROMPT,OnUpdatePrompt);

(5)最后,在Sy5View.cpp文件中给消息处理函数OnUpdatePrompt()添加代码。

voidCSy5View:

:

OnUpdatePrompt(CCmdUI*pCmdUI)

{

CMainFrame*pMainFrame=(CMainFrame*)AfxGetMainWnd();

CStatusBar*pStatusBar=&pMainFrame->m_wndStatusBar;

//获取状态栏指针

CStringstr,str1,str2,str3;

str2="宽1,";

str3="黑色";

str1=(m_typ==1)?

"正弦,":

"余弦,";

if(m_wid==2)//以下代码根据用户选择确定提示信息

str2="宽2,";

elseif(m_wid==3)

str2="宽3,";

if(m_col==RGB(255,0,0))

str3="红色";

elseif(m_col==RGB(0,0,255))

str3="蓝色";

str=str1+str2+str3;

if(m_able==0)str="选择曲线类型";//初始时状态栏中提示信息

pStatusBar->SetPaneText(1,str);//显示提示信息

}

四、运行结果及分析

五、实验心得

这次实验过程较多,老师给的实验步骤较具体。

在此次实验中,了解到了MFC中菜单资源的使用,快捷菜单的创建及使用,工具条资源的创建及使用和字符串资源的使用。

实验过程中,在快捷菜单的实现中花费的时间较多。

不知道是程序原因还是软件自身的问题,实验中预编译若在老师报告中的位置将报错无法实现正常运行,需要改变其位置方能实现。

在实验操作过程中,对于函数的使用及资源的使用仍有较大问题,希望在接下来的学习中能够熟练掌握。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1