关键词不能为空

当前您在: 主页 > 英语 >

MFC报告

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-08 21:50
tags:

-

2021年2月8日发(作者:isler)





《面向对象程序设计》



课程设计报告







号:



班级序号:





名:



指导老师:





绩:



XXX


大学



XXX


学院


XXX


< br>


2010



7




面向对象课程设计指导书




实习题目一



1



橡皮筋画线程序,要求:



?



利用鼠标在视图上绘制线,能够设置线的颜色和宽度;



?



能够用鼠标拾取绘制的某条线,被 选中的线能够高亮显示,并且弹出对话框,输入线的


属性保存起来;


?



能够将绘制的线数据保存在



文本文件中;



?



打开线数据文件

< br>


,可以显示出文件里面的线图形。



【算法设计】



1



设计思想


< br>


首先自己定义一支画笔


,


通过 对话框改变其宽度


,


颜色


(RGB



).


当点击划线按钮时开始划线


,



击设置按钮能够改变线的各种属性


,


划线完成后点击拾取按钮


,

< br>用鼠标左键点击你要选中的线条


,


以发现选中的线条会变成黄色的


,


高亮度显示


,


然后弹出对话框


,


通过它 课以改变这条线的属性


,


最后


是文件管 理按钮


,


里面包含有保存和打开两个选项


,


当你划线完成后点击保存所画的线条各个属性


通过


On


Save()


函数就会保存在

< p>


文件中


.


其中的拾取需要 一个确定你选的点是不是在画的线


条上


,


设计的算法为


:


选中的点到所画线条的两个端点的距离之和< /p>


(A+B)


是否等于线段的长度


C,


由于


一次选中可能较小


,

< br>于是可以让


(A+B)-C


在一个范围里变成一个扁的椭 圆


.


重点就是这个选中算法


.



2



设计表示







线




































点击开


始 划线


否则不


能执行


此操作





线

< br>条



对选中的


线条高亮


显示并可


以改变属





线








线





【调试报告】



菜单栏


:


- 2 -


2


面向对象课程设计指导书















点击开始


,


所画线条


:



点击设置按钮:





宽度设置为


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);



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));


< br>distent3=sqrt((m_ptEnd.x-m_ptOrigin.x)*(m_ptEnd .x-m_ptOrigin.x)+(m_ptEnd.y-m_ptOrigin.


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

-


-


-


-


-


-


-


-



本文更新与2021-02-08 21:50,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/617211.html

MFC报告的相关文章