VC++net五次上机实验报告1.docx
- 文档编号:9517156
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:15
- 大小:103.21KB
VC++net五次上机实验报告1.docx
《VC++net五次上机实验报告1.docx》由会员分享,可在线阅读,更多相关《VC++net五次上机实验报告1.docx(15页珍藏版)》请在冰豆网上搜索。
VC++net五次上机实验报告1
面向对象程序设计作业
实验报告
专业班级:
姓名:
学号:
授课老师:
实验二、模式对话框及通用对话框的使用
实验目的:
掌握模式对话框的使用
项目介绍
功能:
鼠标画直线、矩形(带橡皮线);设置所画图形的线宽;设置所画图形颜色;
如图所示:
工具条上新增5个按钮。
前两个分别为:
画矩形,画直线。
最后一个用于设置线宽。
由于只有设置线宽这一功能为本实验目的,以下重点介绍这一功能的实现。
其它功能仅给出代码。
运行效果及代码:
1.单击wildth按钮后显示以下对话框
实现方式及代码:
1.模式对话框
首先在资源中加入对话框(insertdialog)。
用classwiard为所添加的对话框创建wildthdlg类,继承CDialog类,用于封闭与该模式对话框相关的功能。
enum{IDD=IDD_DIALOG1};
为wildthdlg添加记录用户所设置的笔宽的变量,intm_wildth(初始化为m_wildth=0;)。
为wildthdlg添加用于处理用户所输入数据的函数:
voidwildthdlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
DDX_Text(pDX,IDC_EDIT1,m_wildth);
DDV_MinMaxInt(pDX,m_wildth,1,12);
}
在View类的cpp文件中添加响应函数使得当单击wildth按钮时显示相应对话框:
voidCdraw1View:
:
OnButtonwildth()
{
wildthdlgdlg;
dlg.DoModal();
if(dlg.DoModal()==IDOK)
{
presentwildth=dlg.m_wildth;
}
}
并在消息映射处添加:
ON_COMMAND(ID_BUTTONwildth,&Cdraw1View:
:
OnButtonwildth)
2.画直线、矩形(橡皮线)
代码(CGraph为继承CObject的类,Cline,CRectangle为其子类。
重载构造函数):
CGraph:
:
CGraph()
{
proportion=0.0f;
startpoint=CPoint(0,0);
endpoint=CPoint(0,0);
wildth=1;
color=RGB(0,0,255);
}
CGraph:
:
~CGraph()
{
}
CLine:
:
CLine(CPointlstart,CPointlend,COLORREFlcolor,intlwildth,floatlproportion)
{
startpoint=lstart;
endpoint=lend;
color=lcolor;
wildth=lwildth;
proportion=lproportion;
}
voidCLine:
:
Draw(CDC*pDC)
{
CPenpen;
pen.CreatePen(PS_SOLID,wildth,color);
pDC->SetDCPenColor(color);
pDC->SelectObject(pen);
pDC->MoveTo(startpoint);
pDC->LineTo(endpoint);
}
CRectangle:
:
CRectangle(CPointrstart,CPointrend,COLORREFrcolor,intrwildth,floatrproportion)
{
startpoint=rstart;
endpoint=rend;
color=rcolor;
wildth=rwildth;
proportion=rproportion;
}
voidCRectangle:
:
Draw(CDC*pDC)
{
CPenpen;
pen.CreatePen(PS_SOLID,wildth,color);
pDC->SelectObject(pen);
pDC->SetDCPenColor(color);
pDC->Rectangle(startpoint.x,startpoint.y,endpoint.x,endpoint.y);
}
橡皮线:
(利用R2_NOT取反绘图模式当鼠标移动时重绘刚才所绘的图形从而达到擦除的效果,然后再绘制由新point所决定的图形)
voidCdraw1View:
:
OnMouseMove(UINTnFlags,CPointpoint)
{
if(nFlags&MK_LBUTTON)
{
CClientDCpDC(this);
pDC.SetROP2(R2_NOT);
if(presentgraph)
{
presentgraph->Draw(&pDC);
}
secondpoint=point;
presentgraph=creategraphobj(type);
presentgraph->Draw(&pDC);
}
CView:
:
OnMouseMove(nFlags,point);
}
实验三
实验目的:
熟悉.net的开发平台,掌握CDC类的使用:
文本的输出,数字的显示输出,点线图的绘制,位图的显示输出;cview类中cdc的使用;练习菜单栏、工具栏及状态栏资源的创建和应用;
项目介绍
功能:
主菜单中增加drawfunction,poem,color四个菜单,及clear选项。
Drawfunction中含sin,cos两个选项,单击各选项客户区将显示相应函数。
Poem中含poem1,poem2两个选项,单击各选项客户区将显示相应的诗。
Color中含blue,red两个选项,单击各选项将设置所显示的函数的颜色。
Clear选项用于清空客户区。
运行效果及代码:
1.单击drawfunction下的sin选项(cos同理):
实现方式:
在view类的cpp文件里加入:
voidCMy612View:
:
OnSin()
{
CClientDCaDC(this);
CClientDC*pDC=&aDC;
COLORREFcolor1=color;
COLORREFcolor2=RGB(0,255,0);
//指定原点
pDC->SetViewportOrg(100,255);
pDC->SetTextColor(RGB(255,0,0));
pDC->SetDCPenColor(color1);
CPenpen_sinx;
pen_sinx.CreatePen(PS_SOLID,2,color1);
pDC->SelectObject(&pen_sinx);
//绘横坐标
CStringsPIText[]={_T("-1/2πD"),_T(""),_T("1/2πD"),_T("πDD"),_T("3/2πD"),_T("2πD"),_T("5/2πD"),_T("3πD"),_T("7/2πD"),_T("4πD"),_T("9/2πD"),_T("5πD")};
intn=-1;
intnTemp=0;
while(nTemp<=660)
{
pDC->LineTo(60*n,0);
pDC->LineTo(60*n,-5);
pDC->MoveTo(60*n,0);
pDC->TextOut(60*n-sPIText[n+1].GetLength()*3,16,sPIText[n+1]);
n++;
nTemp+=60;
}
pDC->MoveTo(0,0);
doubley,radian;
for(intx=-60;x<600;x++)
{
radian=x/double(60*2)*3.1415926;
y=sin(radian)*2*60;
pDC->SetPixel((int)x,(int)y,color1);
}
}
在同一文件的头部,消息声明处加入:
ON_COMMAND(ID_DRAWFUNCTION_SIN,&CMy612View:
:
OnSin)
其中ID_DRAWFUNCTION_SIN是drawfunction菜单下sin选项的ID号。
2.单击color菜单下red选项设置所画函数的颜色(blue选项同理):
实现方式:
在view类的cpp文件中加入:
voidCMy612View:
:
OnColorRed()
{
color=RGB(255,0,0);
//TODO:
Addyourcommandhandlercodehere
}
其中color是CMy612View类的成员变量
在同一文件的消息映射中加入:
ON_COMMAND(ID_COLOR_RED,&CMy612View:
:
OnColorRed)
3. 单击poem下的poem1
实现方式:
在view类的cpp文件中加入
voidCMy612View:
:
OnPoem1()
{
CClientDCaDC(this);
CClientDC*pDC=&aDC;
COLORREFcolor1=color;
COLORREFcolor2=RGB(0,255,0);
intx=77;
inty=77;
CPenpen_liujiayi;
CPenpen_mathiq;
pen_liujiayi.CreatePen(PS_SOLID,2,color1);
pen_mathiq.CreatePen(PS_SOLID,2,color2);
CStringpoem10("虞美人…………李煜");
CStringpoem11("春花秋月何时了?
往事知多少。
小楼夜又东风,故国堪回首明月中。
);
CStringpoem12("雕栏玉器应犹在,只是朱颜改。
问君能有几多愁,恰似一江春水向东流。
");
pDC->TextOutW(x+40,y,poem10);
pDC->TextOutW(x-20,y+20,poem11);
pDC->TextOutW(x-40,y+40,poem12);
}
消息映射处加入:
ON_COMMAND(ID_POEM_POEM1,&CMy612View:
:
OnPoem1)
View的头文件中加入:
afx_msgvoidOnPoem1();
4.单击clear清空屏幕:
在view类的cpp文件中加入:
voidCMy612View:
:
Onclear()
{
CClientDCaDC(this);
CClientDC*pDC=&aDC;
CBrushbrush;
CRectrect;
GetClientRect(&rect);
brush.CreateSolidBrush(WHITE_BRUSH);
pDC->FillRect(rect,&brush);
}
消息映射处加入:
ON_COMMAND(ID_CLEAR,&CMy612View:
:
Onclear)
实验五、分裂视图及多文档应用程序
实验目的:
掌握分裂视图的方法
项目介绍
功能:
分裂视图, 左窗格使用CformView,添加一个列表框,设定sin()、cos(),添加两个滑动条用于动态调节所画函数图像的颜色;右窗格使用Cview,画一个坐标系,显示正余弦图像。
图示:
初始显示cos函数,颜色为蓝色
单击sin后
拖动green滑动条后 (注意比较下图与上图间的颜色差别,及green滑条上游标的位置):
实现方法及代码:
1.分裂视图:
插入对话框,添加List
为该对话框添加一个CFormView类split3
enum{IDD=IDD_SPLIT3};
split3的初始化:
voidsplit3:
:
OnInitialUpdate()
{
CFormView:
:
OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
CListBox*listbox=(CListBox*)GetDlgItem(IDC_LIST1);
listbox->AddString(_T("sin(x)"));
listbox->AddString(_T("cos(x)"));
}
利用CSplitterWnd变量,在Mainfrm.h中添加以下变量
CSplitterWndm_splitter;
在同一文件中声明函数:
virtualBOOLCMainFrame:
:
OnCreateClient(LPCREATESTRUCTlpcs,CCreateContext*pContext);
在Mainfrm类的Cpp文件中加入:
BOOLCMainFrame:
:
OnCreateClient(LPCREATESTRUCTlpcs,CCreateContext*pContext)
{
VERIFY(m_splitter.CreateStatic(this,1,2));
VERIFY(m_splitter.CreateView(0,0,RUNTIME_CLASS(split3),CSize(100,100),pContext));
VERIFY(m_splitter.CreateView(0,1,RUNTIME_CLASS(Csplit2View),CSize(100,100),pContext));
returntrue;
//returnCFrameWnd:
:
OnCreateClient(lpcs,pContext);
}
为split3的list控件添加消息响应函数(以实现实时控制右边窗格所显示的函数图像):
voidsplit3:
:
OnLbnSelchangeList1()
{
Csplit2Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(!
pDoc)
return;
CListBox*pCtrl=(CListBox*)GetDlgItem(IDC_LIST1);
m_string=pCtrl->GetCurSel();
pDoc->m_string=m_string;
pDoc->UpdateAllViews(NULL);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
ON_LBN_SELCHANGE(IDC_LIST1,&split3:
:
OnLbnSelchangeList1)
Split2View类的cpp文件中的OnDraw函数:
{
……//画坐标
m_string=pDoc->m_string;
color=pDoc->color;
CPenliujiayi;
liujiayi.CreatePen(PS_SOLID,2,color);
pDC->SelectObject(liujiayi);
pDC->SetDCPenColor(color);
switch(m_string)
//根据pDoc中的m_string的值决定画什么函数,先将pDoc的m_string传值给split2View自己的数据成员m_string.
…………
}
2.slider滑条:
在split3类中为slider1添加消息响函数:
voidsplit3:
:
OnNMReleasedcaptureSlider1(NMHDR*pNMHDR,LRESULT*pResult)
{
//TODO:
Addyourcontrolnotificationhandlercodehere
*pResult=0;
Csplit2Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(!
pDoc)
return;
CSliderCtrl*slider=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
green=slider->GetPos();
pDoc->color=RGB(0,green,blue);
pDoc->UpdateAllViews(NULL);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC net 五次 上机 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)