-
《面向对象程序设计》
课程设计报告
学
号:
班级序号:
姓
名:
指导老师:
成
绩:
XXX
大学
XXX
学院
XXX
系
< br>
2010
年
7
月
面向对象课程设计指导书
实习题目一
1
、
橡皮筋画线程序,要求:
?
利用鼠标在视图上绘制线,能够设置线的颜色和宽度;
?
能够用鼠标拾取绘制的某条线,被
选中的线能够高亮显示,并且弹出对话框,输入线的
属性保存起来;
?
能够将绘制的线数据保存在
文本文件中;
?
打开线数据文件
< br>
,可以显示出文件里面的线图形。
【算法设计】
(
1
)
设计思想
:
< br>
首先自己定义一支画笔
,
通过
对话框改变其宽度
,
颜色
(RGB
p>
值
).
当点击划线按钮时开始划线
,
点
击设置按钮能够改变线的各种属性
,
划线完成后点击拾取按钮
,
< br>用鼠标左键点击你要选中的线条
,
可
以发现选中的线条会变成黄色的
,
高亮度显示
,
然后弹出对话框
,
通过它
课以改变这条线的属性
,
最后
是文件管
理按钮
,
里面包含有保存和打开两个选项
,
当你划线完成后点击保存所画的线条各个属性
通过
On
Save()
函数就会保存在
文件中
.
其中的拾取需要
一个确定你选的点是不是在画的线
条上
,
设计的算法为
:
选中的点到所画线条的两个端点的距离之和<
/p>
(A+B)
是否等于线段的长度
C,
p>
由于
一次选中可能较小
,
< br>于是可以让
(A+B)-C
在一个范围里变成一个扁的椭
圆
.
重点就是这个选中算法
.
(
2
)
设计表示
p>
:
划
线
文
件
管
理
开
始
设
置
拾
取
保
存
打
开
点击开
始
划线
否则不
能执行
此操作
设
置
线
< br>条
属
对选中的
线条高亮
显示并可
以改变属
性
存
线
条
属
p>
性
打
开
线
条
【调试报告】
菜单栏
:
- 2 -
2
面向对象课程设计指导书
p>
点击开始
,
所画线条
:
点击设置按钮:
宽度设置为
110
颜色改变为(
255,0,0
)后所画线条:
- 3 -
3
面向对象课程设计指导书
点击拾取按钮所画线条高亮显示并弹出改变属性按钮:
点击保存按钮:
【附录】
- 4 -
4
面向对象课程设计指导书
添加消息响应函数:
void
CDrawlineView::OnLButtonDown(UINT nFlags, CPoint
point)
鼠标左键点下响应
void
CDrawlineView::OnLButtonUp(UINT nFlags, CPoint
point)
鼠标左键弹起响应
void
CDrawlineView::OnMouseMove(UINT nFlags, CPoint
point)
鼠标移动响应
创建画笔画笔的线性,颜色,宽度和划线功能的实现:
CClientDC dc(this);
CPen Mypen;
CPen *pOldPen;
Pen(PS_SOLID,width,RGB(red,
green,blue));
pOldPen=Object(&Mypen);
(m_ptOrigin);
(point);
Object(pOldPen);
保存线条属性:
CGraph *pGraph=new
CGraph(m_ptOrigin,m_ptEnd,width,red,green,blue);
m_(pGraph);
新建一个指针型类对象保存各个属性。
窗口重绘使得窗口放大后依然显示所画的图像在
On
Draw
()函数中实现:
void
CDrawlineView::OnDraw(CDC* pDC)
{
CDrawlineDoc* pDoc =
GetDocument();
ASSERT_V
ALID(pDoc);
<
br>distent3=sqrt((m_ptEnd.x-m_ptOrigin.x)*(m_ptEnd
.x-m_ptOrigin.x)+(m_ptEnd.y-m_ptOrigin.
for(int i=0;i
{
CClientDC dc(this);
CPen Mypen;
CPen *pOldPen;
还原划线时的画笔的属性值以便重新划线:
Pen(PS_SOLID,((CGraph*)m_(i
))->width,RGB(((CGraph*)m_ptrArra
(i))->
red,((CGraph*)m_(i))->green,((CGraph*)m_(i))->blue
));
pOldPen=Object(&Mypen);
(((CGraph*)m_(i))->m_ptOrigin);
(((CGraph*)m_(i))->m_ptEnd);
Object(pOldPen);
}
// TODO: add
draw code for native data here
}
设置对话框中传值函数,通过对话框设置线条的各个属性:
CGetDlg getdlg;
设置对话框的调用。
getdlg.m_nwidth=width;
getdlg.m_nred=red;
getdlg.m_ngreen=green;
getdlg.m_nblue=blue;
- 5 -
5
面向对象课程设计指导书
if(IDOK==l())
{
width=getdlg.m_nwidth;
线宽传值
red=getdlg.m_nred;
green=getdlg.m_ngreen;
传值的实现
blue=getdlg.m_nblue;
传值的实现
}
拾取函数,确定是否选中的是所画的线条:
bool CGraph::GetLength(CPoint point)
{
double
distent1,distent2,distent3;
声明三个变量
distent1=sqrt((point.x-m_pt
Origin.x)*(point.x-m_ptOrigin.x)+(point.y-m_ptOrig
in.y)*(point.y-
m_ptOrigin.y));
distent2=sqrt((point.x-m_pt
End.x)*(point.x-m_ptEnd.x)+(point.y-m_ptEnd.y)*(po
int.y-m_ptE
nd.y));
y)*(m_ptEnd.y-m_ptOrigin.y));
线段的长度
if(((distent1+distent2)-dis
tent3)<0.1&&((distent1+distent2)-distent3)>-0.1)
计算距离
{
return 1;
返回的值用以响应是否高亮显示函数
}
else
{
return 0;
}
}
保存与打开函数的实现:
v
oid CDrawlineView::OnSave()
{
//
TODO: Add your command handler code here
char* filename=
CStdioFile Line;
CFileException fileException;
if((filename,CFile::typeTex
t|CFile::modeCreate|CFile::modeReadWrite),&fileExc
ept
ion)
{
CString str;
for(int
i=0;i
{
(
h*
)m_(i))->red,((CGraph*)m_(i))->green,((CGraph*)m_(
i))
->blue,((CGraph*)m_(i))->m_ptOrigin.
x,((CGraph*)m_(i))->m_ptOrigin.y
- 6 -
6
面向对象课程设计指导书
,((CGraph*)m_(i))->m_ptEnd.x,((CGraph*)m_(
i))->m_ptEnd.y);
保存的线条的各个属性值
tring(str);
}
}
();
MessageBox(<
/p>
文件已成功保存在
D
盘得
中!
}
void CDrawlineView::OnOpen()
{
//
TODO: Add your command handler code here
char* filename=
CStdioFile Line;
CFileException fileException;
if((filename,CFile::typeTex
t|CFile::modeReadWrite),&fileException)
{
long length=gth();
int
*Line_Array;
Line_Array=new
int[length/2];
CString str =
char ch[1];
Begin();
int m=0;
for(int j=0;j
{
(ch,1);
if(ch[0]!=',')
{
str=str+ch[0];
}
else
{
Line_Array[m++]=atoi(str);
str
=
}
}
();
for(int n=0;n
{
delete(m_(n));
-
7 -
7
-
-
-
-
-
-
-
-
-
上一篇:大学英语B(全新版)教学大纲
下一篇:初级德语测试题(附答案)