VC++毕业论文
摘要visual c++ 是运行于windows平台上的可视化集成开发环境,它是microsoft公司开发的microsoft visual studio 系列的一部分. visual c++ 集程序的界面设计.代码编辑.编译.连接和调试等功能于一体,为编程人员提供了一个方便而完整的开发界面和许多的有效的辅助开发工具.
在工程软件中,经常需要绘图表示工业现场的布置图,而且要求绘图软件能够将绘图元素的对象化,有利于修改.这个绘图软件就能够满足这要求,它是一个用于对象化的绘图软件,用于辅助客户完成常用图形的绘制.存储等操作的软件.
【关键字】 c++语言 序列化技术 crecttracker技术 对象实时编辑技术
visual c operates the visual integrated development environment on windows platform, it is a part of microsoft visual studio series which microsoft company develops . the interface that visual c collects the procedure is designed. code editor. compile. connect and debug function on an organic whole , offer one convenience intact development interface and a lot of effective assisting the developing instrument to programming personnel. in the project software , often need drawing to show the arrangement of the industrial scene is pursued , require mapping software can draw target of element, favorable to , fix. this mapping software can meet this requirement , it is that one is used in target mapping software, for assisting the customer to finish the drawing of the daily figure. the ones that store etc. and operate are soft
【key word】c++ the language sequence turn the technique crecttracker technique object solid hour edit a technique
目录
摘 要…………………………………………………………………………………………2
目 录…………………………………………………………………………………………3
1绘图软件的介绍……………………………………………………………………………….4
1.1绘图软件的特色……………………………………………………………………….....4
1.2绘图元素对象化 …………………………………………………………………………..4
1.3图形对象的动态修改……………………………………………………………………...4
1.4存取操作…………………………………………………………………………………….4
1.5绘图软件的功能…………………………………………………………………………….4
2.系统设计与选型……………………………………………………………………………… 7
2.1 软件工具的选型………………………………………………………………………….. 7
2.2 visual c++6.0 编程环境简介…………………………………………………………….7
2.3 绘图软件模块分工设计…………………………………………………………………. 16
3. 绘图软件功能模块的创建…………………………………………………………………19 . 3.1 clne类记录直线信息……………………………………………………………………..19
3.2.carc类记录弧线信息……………………………………………………………………..22
3.3.cellipse类记录椭圆信息………………………………………………………………. 25
3.4.crectangle类记录矩形信息……………………………………………………………. 28
3.5.ctext类记录文本信息………………………………………………………………….. 32
3.6.clineproperties类显示和修改cline和carc类信息………………………………..33
3.7.cellpseproerties类显示和修改cellipse和crectangle类的信息………………. 37
3.8.ctextproperties类显示和修改ctext 类信息………………………………………..42
3.9.cmydrawview类实现绘图操作………………………………………………………….. 43
3.10.工具栏的设计…………………………………………………………………………… 44
3.11.绘制绘图元素…………………………………………………………………………… 47
3.12.选择绘图元素…………………………………………………………………………… 50
3.13.鼠标形态的自适应……………………………………………………………………… 53
3.14.显示绘图元素的属性…………………………………………………………………… 53
3.15.删除绘图元素…………………………………………………………………………… 55
3.16.cmydrawdoc类实现文档的存取操作…………………………………………………… 57
3.17.打开文档………………………………………………………………………………… 58
3.18.序列化…………………………………………………………………………………… 59
4.结束语………………………………………………………………………………………. 61
5.参考文献…………………………………………………………………… ……………….62
2.3绘图软件模块分工设计
利用visual c++6.0新建一个项目。项目名称为mydraw,项目类型为单文档。
整个项目中,包括以下13个类,如图
各类的分工如下
caboutdlg: 显示“关于”对话框。
carc: 弧线类,记录弧线的信息。
cellipse: 椭圆类,记录椭圆的信息。
cellipseproperties: 显示和修改椭圆.矩形属性。
cline :直线类,记录直线的信息。
clineproperties: 显示和修改直线.弧线属性。
cmainframe: 主框架类。
cddddapp: 应用程序类。
cdddddoc 文档类
cddddview 视图类
crectangle 矩形类,记录矩形的信息。
ctext: 文本类,记录文本的信息。
ctextproperties: 显示和修改文本的属性。
3. 绘图软件功能模块的创建
3.1 clne类记录直线信息
cline类主要有俩大功能:定义直线对象的属性和实现直线对象的序列化
cline类中,直线对象被定义了以下6个属性。
(0)bisselected: bool型, 指示直线是否处于选中状态。
startx:int型,直线的起点x坐标。
starty:int型,直线的起点y坐标。
endx: int型,直线的终点x坐标。
endy: int型,直线的终点y坐标。
linepen: logpen型,绘制直线采用的画笔。
cline类的头文件line.h文件的内容如下:
#if _msc_ver > 1000
#pragma once
#endif // _msc_ver > 1000
class cline:public cobject
{
// declare_dynamic(cline)
declare_serial(cline)
public:
bool bisselected;
int startx;
int starty;
int endx;
int endy;
logpen linepen;
cline();
virtual ~cline();
here
cfontdialog dlg(&m_font);
if(dlg.domodal()==idok)
{
dlg.getcurrentfont(&m_font);
m_textcolor=dlg.m_cf.rgbcolors;
}
}
在调用ctextproperties类时会改变控件变量。成员变量的值,使他们能够反映文本参数。
同样,在对话框中修改参数后,会将修改后的结果保存在控件变量和成员变量中,通过读取控件变量和成员变量就可以得到修改后文本参数。
3.9.cmydrawview类实现绘图操作
为cmydrawview类添加俩个成员变量:
public:
cptrlist m_objectlist
crecttracker m_tracker
其中m_objectlist存储了绘图对象的连表,成员变量m_tracker用于显示选中的绘图对象四周的调节框,通过该调节框还可以更改绘图对象的位置大小。
在cmydrawview类的构造函数cmydrawview()中,程序首先设m_tracker的风格是:在选择对象的内部显示调节框,并且在选择对象的四周显示虚线;然后设置m_tracker的位置和大小;最后设置m_tracker中调节点的大小,代码如下:
cmydrawview::cmydrawview()
{
m_tracker.m_nstyle=crecttracker::resizeinside|
crecttracker::dottedline;
m_tracker.m_rect.setrect(0,0,0,0);
m_tracker.m_nhandlesize=8;
}
3.10工具栏的设计
在resourceview中,双击toolbar中的idr_mainframe项,就会显示主页面中工具栏的编辑窗口,在其中添加5个工具栏按钮直线。椭圆。矩形。弧线 文本。
新添加的5个工具栏按钮的作用是向绘图对象的链表m_objectlist中添加直线 椭圆 矩形 弧线和文本等绘图元素。
添加5个工具栏按钮的响应函数, 代码如下:
void cmydrawview::onbuttonline()
{
cline* pline=new cline;
m_objectlist.addtail(pline);
invalidate();
}
void cmydrawview::onbuttonellipse()
{
cellipse* pellipse=new cellipse;
m_objectlist.addtail(pellipse);
invalidate();
}
void cmydrawview::onbuttonrectangle()
{
crectangle* prectangle=new crectangle;
m_objectlist.addtail(prectangle);
invalidate();
}
void cmydrawview::onbuttonarc()
{
carc* parc=new carc;
srand(::gettickcount());
if(rand()%10+1>5)//²úéúò»¸ö1µ½10µäëæ»úêý
parc->direction=0;
else
parc->direction=1;
m_objectlist.addtail(parc);
invalidate();
}
void cmydrawview::onbuttontext()
{
ctext* ptext=new ctext;
m_objectlist.addtail(ptext);
invalidate();
}
3.11.绘制绘图元素
cmydrawview类的ondraw函数用于完成绘图元素的绘制功能,
ondraw函数代码如下:
void cmydrawview::ondraw(cdc* pdc)
{
cmydrawdoc* pdoc = getdocument();
assert_valid(pdoc);
position pos = m_objectlist.getheadposition();
cellipse* pellipse = null;
cline* pline=null;
crectangle* prectangle=null;
carc* parc=null;
ctext* ptext=null;
cobject* pobject=null;
while(pos != null)
{
pobject=(cobject*)m_objectlist.getnext(pos);
if (pobject->iskindof(runtime_class(cellipse)))
{
pellipse = (cellipse*)pobject;
if(pellipse != null)
{
if (pellipse->bisselected)
{
pellipse->startx=m_tracker.m_rect.left;
pellipse->starty=m_tracker.m_rect.top;
pellipse->endx=m_tracker.m_rect.right;
pellipse->endy=m_tracker.m_rect.bottom;
}
drawellipse(pdc,pellipse);
if (pellipse->bisselected)
{
m_tracker.draw(pdc);
}
}
}省略绘制直线、弧线和文本代码
else if (pobject->iskindof(runtime_class(crectangle)))
{
prectangle = (crectangle*)pobject;
if(prectangle != null)
{
if (prectangle->bisselected)
{
prectangle->startx=m_tracker.m_rect.left;
prectangle->starty=m_tracker.m_rect.top;
prectangle->endx=m_tracker.m_rect.right;
prectangle->endy=m_tracker.m_rect.bottom;
}
drawrectangle(pdc,prectangle);
if (prectangle->bisselected)
{
m_tracker.draw(pdc);
}
}
}
}
}
3.12选择绘图元素
cmydrawview类的onlbuttondown函数用于响应wm_lbuttondown消息,
wm_lbuttondown消息的响应代码如下:
void cmydrawview::onlbuttondown(uint nflags, cpoint point)
{
cellipse* pellipse = null;
cline* pline=null;
crectangle* prectangle=null;
carc* parc=null;
ctext* ptext=null;
position pos = m_objectlist.getheadposition();
cobject* phititem;
while(pos != null)
{
phititem=(cobject*)m_objectlist.getnext(pos);
if (phititem->iskindof(runtime_class(cellipse)))
{
pellipse = (cellipse*)phititem;
if(pellipse != null)
{
crect rc;
rc.left=pellipse->startx;
rc.top=pellipse->starty;
rc.right=pellipse->endx;
rc.bottom=pellipse->endy;
if (rc.ptinrect(point))
{
clearselection();
pellipse->bisselected=true;
m_tracker.m_rect.setrect(pellipse->startx,pellipse->starty,
pellipse->endx,pellipse->endy);
}
else
{
pellipse->bisselected=false;
}
}
}省略选择直线、弧线和文本的代码
else if (phititem->iskindof(runtime_class(crectangle)))
{
prectangle = (crectangle*)phititem;
if(prectangle != null)
{
crect rc;
rc.left=prectangle->startx;
rc.top=prectangle->starty;
rc.right=prectangle->endx;
rc.bottom=prectangle->endy;
if (rc.ptinrect(point))
{
clearselection();
prectangle->bisselected=true;
m_tracker.m_rect.setrect(prectangle->startx,
prectangle->starty,prectangle->endx,prectangle->endy);
}
else
{
prectangle->bisselected=false;
}
}
}
}
m_tracker.track(this,point);//
invalidate();
}
3.13鼠标形态的自适应
wm_setcursor消息的响应代码如下:
bool cmydrawview::onsetcursor(cwnd* pwnd, uint nhittest, uint message)
{
// todo: add your message handler code here and/or call default
if(m_tracker.setcursor(pwnd,nhittest))
return true;
return cview::onsetcursor(pwnd, nhittest, message);
}
3.14.显示绘图元素的属性
wm_setcursor消息的响应代码如下:
void cmydrawview::onlbuttondblclk(uint nflags, cpoint point)
{
cellipse* pellipse = null;
cline* pline=null;
crectangle* prectangle=null;
carc* parc=null;
ctext* ptext=null;
position pos = m_objectlist.getheadposition();
cobject* phititem;
while(pos != null)
{
phititem=(cobject*)m_objectlist.getnext(pos);
if (phititem->iskindof(runtime_class(cline)))
{
pline = (cline*)phititem;
if(pline != null)
{
if (pline->bisselected)
{
clineproperties linedlg;
cstring str_linewidth;
str_linewidth.format("%d",pline->linepen.lopnwidth.x);
linedlg.m_linewidth=str_linewidth;
if (pline->linepen.lopnstyle==ps_dash)
linedlg.m_linestyle="虚线 ";
else if (pline->linepen.lopnstyle==ps_dot)
linedlg.m_linestyle="点线";
else if(pline->linepen.lopnstyle==ps_dashdot)
linedlg.m_linestyle="点划线";
else
linedlg.m_linestyle="实线";
linedlg.m_linecolor=pline->linepen.lopncolor;
if (linedlg.domodal()==idok)
{
pline->linepen.lopnwidth.x=atoi(linedlg.m_linewidth);
if (linedlg.m_linestyle=="虚线")
pline->linepen.lopnstyle=ps_dash;
else if (linedlg.m_linestyle=="点线")
pline->linepen.lopnstyle=ps_dot;
else if(linedlg.m_linestyle=="点划线")
pline->linepen.lopnstyle=ps_dashdot;
else
pline->linepen.lopnstyle=ps_solid;
pline->linepen.lopncolor=linedlg.m_linecolor;
invalidate();
}
}
}
}此处省略显示椭圆、矩形、弧线和文本属性的代码
cview::onlbuttondblclk(nflags, point);
}
3.15.删除绘图元素
wm_keyup消息的响应代码如下:
void cmydrawview::onkeyup(uint nchar, uint nrepcnt, uint nflags)
{
cellipse* pellipse = null;
cline* pline=null;
crectangle* prectangle=null;
carc* parc=null;
ctext* ptext=null;
if (46==nchar)
{
position pos = m_objectlist.gettailposition();
cobject* phititem;
while(pos != null)
{
position curpos=pos;
phititem=(cobject*)m_objectlist.getprev(pos);
if (phititem->iskindof(runtime_class(cellipse)))
{
pellipse = (cellipse*)phititem;
if(pellipse != null)
{
if (pellipse->bisselected)
{
m_objectlist.removeat(curpos);
invalidate();
break;
}
}
}此处省略删除直线、矩形、弧线和文本的代码
cview::onkeyup(nchar, nrepcnt, nflags);
}
3.16.cmydrawdoc类实现文档的存取操作
新建文档
新建文档时,会激活文档类的onnewdocument函数。由于存储绘图元素的链表m_objectlist在试图类中,所以首先得到视图类的对象myview,然后删除链表m_objectlis中的所有绘图元素:
bool cmydrawdoc::onnewdocument()
{
if (!cdocument::onnewdocument())
return false;
// todo: add reinitialization code here
// (sdi documents will reuse this document)
position viewpos=this->getfirstviewposition();
cmydrawview * myview=(cmydrawview *)this->getnextview(viewpos);
myview->m_objectlist.removeall();
return true;
}
3.17打开文档
如果用户选择打开的文件是空的,也就是说文件的大小为0,那么就自动删除视图类中链表m_objectlist的所有绘图元素:
bool cmydrawdoc::onopendocument(lpctstr lpszpathname)
{
if (!cdocument::onopendocument(lpszpathname))
return false;
// todo: add your specialized creation code here
ofstruct of;
handle hfile = null;;
hfile=(handle)openfile(lpszpathname,&of,of_read|of_share_compat);
if (hfile!=(handle)hfile_error)
{
dword dwhighword = null;
dword dwsizelow = getfilesize(hfile,&dwhighword );
dword dwfilesize = dwsizelow;
if(0==dwfilesize)
{
position viewpos=this->getfirstviewposition();
cmydrawview * myview=(cmydrawview *)this->getnextview(viewpos);
myview->m_objectlist.removeall();
}
}
return true;
}
3.18序列化
cmydrawdoc类的serialze函数用于完成序列化操作,代码如下:
void cmydrawdoc::serialize(carchive& ar)
{
position pos;
if (ar.isstoring())
{
// todo: add storing code here
position viewpos=this->getfirstviewposition();
cmydrawview * myview=(cmydrawview *)this->getnextview(viewpos);
pos = myview->m_objectlist.getheadposition();
while(pos != null)
{
ar << (cobject*)(myview->m_objectlist.getnext(pos));
}
}
else
{
position viewpos=this->getfirstviewposition();
cmydrawview * myview=(cmydrawview *)this->getnextview(viewpos);
myview->m_objectlist.removeall();
cobject * pobject;
do{
try
{
ar >> pobject;
myview->m_objectlist.addtail(pobject);
}
catch(cexception * e)
{
e->delete();
break;
}
}while(pobject != null);
}
4.结束语
在整个设计和开发中,我碰到了许多无法解决的问题,如在程序中本来语句没有错误,可就是在运行中无法按自己的意愿实现,当时指导老师又不在,我检查了一遍又一遍,可就是一筹莫展,但是我在别的类中浏览时,发现了数据类型的不匹配,这么一个小小的错误却导致了错误的运行结果。这使我认识到了,在编写语句时一定要认真,严谨。虽然在程序设计中,错了改,改了错,但是这使我学到了课堂上无法学到的知识,这是我在大学生涯中一个不小的收获。假若没有这次的毕业设计,我真的无法明白设计、编写一软件需要付出如此的艰辛,这是我以前无法想象的。但是我在整个设计过程中,慢慢地喜欢上了编写软件,它在不知不觉中给你带来莫大的乐趣。特别是在成功完成一功能模块时,给人一种很大的成就感。
在本次毕业设计中,我从指导老师身上学到了很多东西。冯静认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感谢他耐心的辅导。另外,在系统开发过程中刘瑞许同学也给于我很大的帮助,帮助解决了不少的难点,使得系统能及时开发完成,还有同班的同学同样给与我不少帮助,这里表示感谢!
5.参考文献
[1] 伍俊良.《visual c++ 课程设计与系统开发案例》.清华大学出版社
[2] 杨小平.《visual c++ 项目案例导航》.科学出版社
[3] 邓宗明,张晓竞.《visual c++ 编程实用技术与案例》.清华大学出版社
[4] 郑阿奇.《visual c++ 实用教程》.电子工业出版社
[5] 萨师煊,王珊.《数据库系统概论》.高等教育出版社
[6] 郑人杰,殷人昆,陶永雷.实用软件工程.清华大学出版社.1997.4
[7] 门槛创作室 《visual c++6.0 实例教程》 电子工业出版社
{8} bjarne stroustrup 《the c++ programming languague》电子科技出版社 1997 ding[EM03] [EM03] [EM02][EM02][EM02] [EM01][EM02][EM03] gfsdlkfgjksdjkfgj ls;djflgsdfdf[EM03] 呵呵 顶 [EM03] 真好需要看看 [EM03] [EM02] 专业定制小软件! vc++ 代做毕业设计 vc++ 毕业论文 c++ c、
<<<<<<<<<< vc++ == vc == visualc++ >>>>>>>>>>>
<<<<< 微软王牌开发环境,功能强大,无所不能! >>>>>>
(1) 较抽象的各类算法的实现。(c\c++语言)
比如:
=============================== 毕业设计 ===============================
①各类图像、指纹等的识别 图像分割(二值化、边缘特征提取)等
②模仿、抄袭文章的检测。
③图像的解压缩。
④常用游戏算法的模拟研究等。
⑤数据结构中各种算法的程序实现等。
⑥图像缩放的多种常用算法。
⑦linux下的图形化界面开发~
⑧vc++ 结合 opengl的三维可视化渲染效果!!!
<<<<<<< 图像处理、经典算法、三维立体场景渲染等高难度都能vc++做 >>>>>>>
=============================== 毕业设计 ================================
(2) 商务办公、企业生产、建筑、机械等常用到的
比如:
01.多媒体教室辅助软件(学生机屏幕广播、投影仪视频控制)
02.医院生物等效性试验的语音智能管理
03.机械加工、走刀轨迹的图形模拟
04.纸箱用料计算 ——(纸板耗用面积、原纸重量耗用量、卡距、 分刀
定义预留量、自定义不同箱形)
05.常用工程单位换算
06.渗流量计算
07.化粪池计算
08.节点流量计算
09.给排水计算
10.照度计算
11.计算闭合差
12.保温计算
13.金属材料单重计算
14.电气整定保护计算
15.消火栓计算
16.灭火器计算
17.偏心受拉构件计算
18.边坡支护计算
…………等等
(3) 玩游戏、上网时,需要的各种工具。
比如:
①自动登录、论坛裙发软件,验证码识别,社区、论坛登陆……
②qq挂机小软件,开机自动隐藏运行qq,从而让qq每天在网吧内免费挂机
——完全隐藏,不留任何痕迹。
(4) 电脑日常使用中需要的各种系统管理。
比如:
①为每个程序指定快捷键运行方式;
②定时关机;
③定时运行或关闭指定程序;
④定时提醒;
⑤早上定时唤醒电脑、启动闹钟音乐;
⑥随时隐藏指定窗口,工作时间上网也就不怕被老板发现了;
………等等
(5) 某些重复性的键盘鼠标操作,需要用软件来模拟键盘、鼠标,以实现自动化。
(6) 工作、生活、学习中其他一些个性化、针对性的功能需要…………
联系方式
q q 号:9297489 ( 请注明:“--毕业设计、软件定制”)
e-mail:usernameofmy@163.com gfsdlkfgjksdjkfgj ls;djflgsdfdf gfsdlkfgjksdjkfgj ls;djflgsdf gfsdlkfgjksdjkfgj ls;djflgsdfdf gggggggg fffffffffff 至爱演唱会 aaaaaaaaaa aaaaaaaaaaaa dddddddddddd