实验三_图形交互技术(完结版)Word格式.doc

上传人:b****1 文档编号:13082066 上传时间:2022-10-04 格式:DOC 页数:6 大小:45KB
下载 相关 举报
实验三_图形交互技术(完结版)Word格式.doc_第1页
第1页 / 共6页
实验三_图形交互技术(完结版)Word格式.doc_第2页
第2页 / 共6页
实验三_图形交互技术(完结版)Word格式.doc_第3页
第3页 / 共6页
实验三_图形交互技术(完结版)Word格式.doc_第4页
第4页 / 共6页
实验三_图形交互技术(完结版)Word格式.doc_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

实验三_图形交互技术(完结版)Word格式.doc

《实验三_图形交互技术(完结版)Word格式.doc》由会员分享,可在线阅读,更多相关《实验三_图形交互技术(完结版)Word格式.doc(6页珍藏版)》请在冰豆网上搜索。

实验三_图形交互技术(完结版)Word格式.doc

利用ResourceView设计菜单,如图6-1所示;

图6-1菜单设计示例菜单

选项

绘图(&

P)

Pop-up=Checked

菜单项

ID值

提示(Prompt)

直线

m_line

两点直线

m_circle

画圆,圆心和半径

椭圆

m_ellipse

绘制椭圆

矩形

m_rectangle

绘制矩形

添加方法:

选择View\ClassWizard菜单项,弹出如图3-19所示的创建类对话框,从中选择工程名(Projects)和类名(Classname),并从ObjectIDs列表框中选择m_line项,在Messages列表框中选择COMMAND,然后,单击“AddFunction”按钮,弹出加入成员函数的对话框,输入成员函数名OnMLine,确定后就添加了OnMLine消息映射函数。

参照以上方法,添加上表中其他的函数。

步骤4:

绘制直线

按照第4章实验一任务三的步骤,实现交互式绘直线;

按照第4章实验二,实现交互式画圆;

但需要做如下的修改:

(1)加入成员变量m_item,用于表示绘图选择项,

proctected:

intm_item;

//0:

不绘图,1:

直线,2:

圆,3:

椭圆,4:

矩形;

(2)在构造函数中初始化变量;

CJhsView:

:

CJhsView()

{

//TODO:

addconstructioncodehere

//画直线的初始化参数

m_p1.x=0;

m_p1.y=0;

//起点

m_p2.x=0;

m_p2.y=0;

//终点

m_ist=0;

//0,第1点;

1,第2点;

m_item=0;

//0:

//

m_bO.x=0;

m_bO.y=0;

//圆心

m_bR.x=0;

m_bR.y=0;

//圆上的点

//m_ist=0;

//圆心与圆上的点区别

m_r=0;

//圆的半径

}

(3)添加菜单驱动函数:

方法是右击CjhsView类,选择消息映射函数(addwindowmessagehandler…)。

在弹出的对话框中的classorobjecttohandle列表中选择m_ine,按下“addandedit”,并在弹出的对话框中输入菜单驱动函数的名字(OnMLine),按下“确定”键。

同理,建立画圆的菜单驱动程序OnMCircle。

voidCJhsView:

OnMLine()

Addyourcommandhandlercodehere

m_item=1;

OnMCircle()

m_item=2;

(4)在OnDraw()中不进行绘图,主要靠鼠标绘图。

OnDraw(CDC*pDC)

CJhsDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

adddrawcodefornativedatahere

//画直线

//Redraw(pDC);

//调用自定义的成员函数,用鼠标画直线

(5)鼠标左击和移动程序

OnLButtonDown(UINTnFlags,CPointpoint)

Addyourmessagehandlercodehereand/orcalldefault

CDC*pDC=GetDC();

pDC->

SelectStockObject(NULL_BRUSH);

//chartbuf[10];

//sprintf(tbuf,"

m_item=%3d"

m_item);

//AfxMessageBox(tbuf);

if(m_item==1)//绘直线

if(!

m_ist)//是起点

m_p1=m_p2=point;

//纪录第一次单击鼠标位置,定圆心

m_ist++;

else

m_p2=point;

//记录第二次单击鼠标的位置,定终点的点

m_ist--;

//为新绘图作准备

DDAMouseLine(pDC,m_p1.x,m_p1.y,m_p2.x,m_p2.y,RGB(255,0,0));

//绘制新直线

elseif(m_item==2)//绘圆

//CDC*pDC=GetDC();

//pDC->

m_ist)//绘制圆

m_bO=m_bR=point;

m_bR=point;

//记录第二次单击鼠标的位置,定圆周上的点

m_r=ComputeRadius(m_bO,m_bR);

MidpointCircle(pDC,m_bO.x,m_bO.y,m_r,RGB(255,0,0));

ReleaseDC(pDC);

//释放设备环境

CView:

OnLButtonDown(nFlags,point);

OnMouseMove(UINTnFlags,CPointpoint)

intnDrawmode=pDC->

SetROP2(R2_NOT);

//设置异或绘图模式,并保存原来绘图模式

if(m_ist==1)

CPointprePnt,curPnt;

prePnt=m_p2;

//获得鼠标所在的前一位置

curPnt=point;

//绘制橡皮筋线

DDAMouseLine(pDC,m_p1.x,m_p1.y,prePnt.x,prePnt.y,RGB(255,0,0));

//DrawCircle(pDC,m_bO,prePnt);

//用异或模式重复画圆,擦出所画的圆

DDAMouseLine(pDC,m_p1.x,m_p1.y,curPnt.x,curPnt.y,RGB(255,0,0));

//DrawCircle(pDC,m_bO,curPnt);

//用当前位置作为圆周上的点画圆

SetROP2(nDrawmode);

//恢复原绘图模式

}elseif(m_item==2)//绘圆

prePnt=m_bR;

m_r=ComputeRadius(m_bO,prePnt);

//用异或模式重复画圆,擦出所画的圆

//DrawCircle(pDC,m_bO,prePnt);

m_r=ComputeRadius(m_bO,curPnt);

OnMouseMove(nFlags,point);

步骤五:

调试、编译、运行程序。

3.3实验体会

在实验进行过程中,虽然经过反复检测,但还是出现了诸多问题,其中有些问题暂未解决。

虽然建立菜单过程中较顺利,但如何将文件中的变量通用还是没有调试好。

虽然实验过程中还存在着较多的未解决的问题和遗憾,但我依然受益匪浅。

通过对实验内容的理解和把握,我掌握图形输入和交互技术的基本方法,也掌握部分图形交互技术的实现方法。

同时,进一步熟练编程语言环境中图形绘制技术。

最重要的是加深了我对图形学的兴趣和认识。

希望在今后的学习中,我可以加强专业技能,早日攻破这些障碍。

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

当前位置:首页 > 党团工作 > 党团建设

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

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