VC++net五次上机实验报告3.docx
- 文档编号:8556502
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:44
- 大小:910.30KB
VC++net五次上机实验报告3.docx
《VC++net五次上机实验报告3.docx》由会员分享,可在线阅读,更多相关《VC++net五次上机实验报告3.docx(44页珍藏版)》请在冰豆网上搜索。
VC++net五次上机实验报告3
《面向对象程序设计》实验报告
题目__________
学生姓名
学号
专业班级
指导老师
实验一cview类中cdc的使用
一.实验目的
熟悉.net的开发平台,掌握CDC类的使用:
文本的输出,数字的显示输出,点线图的绘制,位图的显示输出。
二.实验内容
1.显示一首诗。
2.画一个坐标系,画函数的图像。
3.显示资源中的一幅位图。
4.GDI绘图之鼠标绘图.
三.实验步骤:
实验内容一:
显示一首诗
(1)创建一个名为Ex1的单文档MFC应用程序;
(2)在视图类的源文件中编辑ondraw()函数,添加如下代码:
voidCEx1View:
:
OnDraw(CDC*/*pDC*/)
{
CEx1Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(!
pDoc)
return;
//TODO:
在此处为本机数据添加绘制代码
CClientDCdc(this);
TEXTMETRICtm;
dc.GetTextMetrics(&tm);
intnLineHeight=tm.tmHeight+tm.tmExternalLeading;
dc.TextOut(10,1*nLineHeight,CString("静夜思"));
dc.TextOut(10,2*nLineHeight,CString("床前明月光,"));
dc.TextOut(10,3*nLineHeight,CString("疑是地上霜。
"));
dc.TextOut(10,4*nLineHeight,CString("举头望明月,"));
dc.TextOut(10,5*nLineHeight,CString("低头思故乡。
"));
}
(3)运行程序得到如下结果:
实验内容二:
画一个坐标系,画函数的图像
(1)创建一个名为Ex1_5的单文档MFC运用程序;
(2)在视图类的源文件中编辑ondraw()函数,添加如下代码:
voidCEX1_5View:
:
OnDraw(CDC*pDC)
{
CEX1_5Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(!
pDoc)
return;
//TODO:
在此处为本机数据添加绘制代码
CRectrectClient;
GetClientRect(rectClient);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(1000,1000);
pDC->SetViewportExt(rectClient.right,-rectClient.bottom);
pDC->SetViewportOrg(rectClient.right/2,rectClient.bottom/2);
pDC->MoveTo(-500,0);
pDC->LineTo(500,0);
pDC->MoveTo(500,0);
pDC->LineTo(490,10);
pDC->MoveTo(500,0);
pDC->LineTo(490,-10);
pDC->MoveTo(0,-500);
pDC->LineTo(0,500);
pDC->MoveTo(0,500);
pDC->LineTo(-10,490);
pDC->MoveTo(0,500);
pDC->LineTo(10,490);
for(inti=-4;i<=4;i++)
{
CStringstr;
str.Format(_T("%d"),i);
pDC->MoveTo(i*100,-5);
pDC->LineTo(i*100,+5);
pDC->TextOutW(i*100,-5,str);
}
for(inti=-1;i<=1;i++)
{
if(i==0)
continue;
CStringstr;
str.Format(_T("%d"),i);
pDC->MoveTo(-5,i*100);
pDC->LineTo(+5,i*100);
pDC->TextOutW(+5,i*100,str);
}
pDC->MoveTo(-400,(int)100*sin((float)-4));
for(inti=-400;i<=400;i++)
{
floatix,iy;
inty;
ix=(float)i/100;
iy=sin(ix);
y=(int)100*iy;
pDC->LineTo(i,y);
}
}
(3)运行程序得到如下结果:
实验内容三:
显示资源中的一幅位图。
(1)创建一个名为Ex1_2的单文档MFC运用程序;
(2)为文档添加位图资源:
右键点击项目,单击“添加”菜单项,在打开的“添加资源”对话框里选择Bitmap,单击“导入”,打开文件对话框,选泽所要添加的位图资源。
(3)在视图类的ondraw()函数中添加如下代码:
voidCEX1_2View:
:
OnDraw(CDC*pDC)
{
CEX1_2Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(!
pDoc)
return;
//TODO:
在此处为本机数据添加绘制代码
CBitmapBitmap;
Bitmap.LoadBitmapW(IDB_BITMAP1);//将位图装入内存
CDCMemDC;
MemDC.CreateCompatibleDC(pDC);//创建内存设备环境
CBitmap*OldBitmap=MemDC.SelectObject(&Bitmap);
BITMAPbm;//创建BITMAP结构变量
Bitmap.GetBitmap(&bm);//获取位图信息
pDC->BitBlt(10,10,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);
pDC->SelectObject(OldBitmap);//恢复设备环境
}
(4)运行程序得到如下结果:
实验内容四:
GDI绘图之鼠标绘图.
(1)创建一个名为Ex1_3的单文档MFC运用程序;
(2)在类视图中选择视图类,在视图类中添加消息WM_LBOTTONDOWN,WM_LBUTTONUP,WM_MOUSEMOVE从而得到消息响应函数OnLButtonDown(),OnLButtonUp(),OnMouseMove();
(3)然后再在视图类中添加变量CPointm_ptPrev;CPointm_ptOringin;分别记录当前点和起始点的位置。
(4)在如下函数中添加如下代码;
voidCEx1_3View:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{
//TODO:
在此添加消息处理程序代码和/或调用默认值
SetCapture();
m_ptPrev=point;
CView:
:
OnLButtonDown(nFlags,point);
}
voidCEx1_3View:
:
OnLButtonUp(UINTnFlags,CPointpoint)
{
//TODO:
在此添加消息处理程序代码和/或调用默认值
if(GetCapture()!
=this)
return;
CClientDCdc(this);
dc.MoveTo(m_ptPrev);
dc.LineTo(point);
ReleaseCapture();
CView:
:
OnLButtonUp(nFlags,point);
}
voidCEx1_3View:
:
OnMouseMove(UINTnFlags,CPointpoint)
{
//TODO:
在此添加消息处理程序代码和/或调用默认值
if(GetCapture()!
=this)
return;
CClientDCdc(this);
dc.MoveTo(m_ptPrev);
dc.LineTo(point);
m_ptPrev=point;
CView:
:
OnMouseMove(nFlags,point);
}
(5)运行程序得到如下的结果:
四实验总结:
在获取设备环境时有两种方法:
一种是函数本身使用CDC*pDC
第二种是使用CClientdc(this)
this.
的方式。
实验二、模式对话框及通用对话框的使用
一.实验目的
掌握对话框中数据交换的技术。
常用控件的使用,CfileDialog的使用.
二.实验内容
(1)求两正整数的最大公约数和最小公倍速数,用一个函数求最大公约数,另一个函数求最小公倍数。
要求:
两正整数从对话框输入。
将最大公约数和最小公倍数在ondraw()函数中输出。
(2)使用Cfile和CfileDialog及atl的image类显示输出图像.
(3)在视图类中集成Richedit控件,然后显示一个文本文件或rtf文件.
三.实验步骤:
实验内容一:
求两正整数的最大公约数和最小公倍速数,用一个函数求最大公约数,另一个函数求最小公倍数。
要求:
两正整数从对话框输入。
将最大公约数和最小公倍数在ondraw()函数中输出。
(1)创建一个名为Ex2_1的单文档MFC运用程序;
(2)编辑菜单资源,添加一个名为“计算”的菜单项;如图所示:
设定菜单项“计算“的ID号为ID_CALCULATE,并在视图类中添加消息响应函数OnCalculate(),在头文件中加入#include"Dig.h"添加如下代码:
voidCEx2_1View:
:
OnCalculate()
{
//TODO:
在此添加命令处理程序代码
CDigdig;
dig.DoModal();//激活对话框
}
(3)新插入一对话框,编辑对话框资源,添加控件下表所示
控件
ID
Caption
静态控件
IDC_STATIC
请输入两个数字
静态控件
IDC_STATIC
数字a
静态控件
IDC_STATIC
数字b
静态控件
IDC_STATIC
最小公倍数
静态控件
IDC_STATIC
最大公约数
编辑框
IDC_EDIT1
编辑框
IDC_EDIT2
编辑框
IDC_EDIT3
编辑框
IDC_EDIT4
按钮
IDC_BUTTON1
计算
得到对话框:
(3)在新建的对话框中添加一个CDig类,在四个编辑框中分别添加变量:
控件ID
变量名
变量类型
说明
IDC_EDIT1
m_num1
int
从编辑框中接收数字a
IDC_EDIT2
m_num2
int
从编辑框中接收数字b
IDC_EDIT3
m_mnum1
int
从编辑框中输出最小公倍数
IDC_EDIT1
m_mnum2
int
从编辑框中输出最大公约数
(4)在创建类的源文件Dig.cpp中为按钮“计算“添加消息响应函数OnBnClickedButton1(),并添加如下代码:
voidCDig:
:
OnBnClickedButton1()
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(true);
m_mnum1=fun_1(m_num1,m_num2);
m_mnum2=func2(m_num1,m_num2);
UpdateData(false);
}
(5)在CDig类中添加函数intfun_1(intm_num1,intm_num2)和intfunc2(intm_num1,intm_num2)分别用于计算两个数的最小公倍数和最大公约数,并添加如下代码:
intCDig:
:
fun_1(intm_num1,intm_num2)//计算最小公倍数
{
intt,m,i;
if(m_num1 {t=m_num2;m=m_num1;} else {t=m_num1;m=m_num2;} if(t%m==0) {returnm; } else for(i=m-1;i>=1;i--) {if((t%i==0)&&(m%i==0)) {returni; break;} } return0; } intCDig: : func2(intm_num1,intm_num2)//计算最大公约数 {intt,m,n,s; if(m_num1 {t=m_num2;m=m_num1;} else {t=m_num1;m=m_num2;} if(t%m==0) returnt; else {n=fun_1(t,m); s=n*((m/n)*(t/n)); returns; } } (6)运行程序得到如下结果: 实验内容二: 使用Cfile和CfileDialog及atl的image类显示输出图像 (1)创建一个名为Ex2_2的单文档MFC运用程序; (2)在视图类中添加消息WM_LBOTTONDOWN,并在消息处理函数中添加如下代码: voidCEx2_2View: : OnLButtonDown(UINTnFlags,CPointpoint) {//TODO: 在此添加消息处理程序代码和/或调用默认值 CStringFilePathName; CFileDialogdlg(true,"bmp","未命名.bmp",OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT); if(dlg.DoModal()==IDOK) FilePathName=dlg.GetPathName(); CClientDCdc(this); dc.TextOut(10,10,FilePathName); CView: : OnLButtonDown(nFlags,point); } 实验三菜单栏,工具栏和状态栏的使用 一.实验目的: 练习使用菜单栏,工具栏和状态栏的使用 二.实验内容: 编写一个单文档应用程序Ex5。 在主菜单中增加【曲线】、【线宽】和【颜色】3个菜单项,【曲线】菜单中包含【正弦】和【余弦】两个菜单项;【线宽】菜单中包含【线宽2】和【线宽3】两个菜单项;【颜色】菜单中包含【红色】和【蓝色】两个菜单项。 为该应用程序创建一个新工具栏和一个快捷菜单,工具栏包含4个按钮,分别与菜单项【线宽2】、【线宽3】、【红色】和【蓝色】相对应,快捷菜单上有【正弦】、【余弦】、【线宽2】、【线宽3】、【红色】和【蓝色】6个菜单项。 在状态栏中增加一个窗格,用来显示曲线的类型、线宽以及颜色的提示信息。 要求: 程序运行时,在视图窗口中显示坐标轴、曲线、曲线的属性、状态栏的提示以及所选菜单项的标记,并且都能够随着用户的选择而变化。 目的: 练习菜单栏、工具栏及状态栏资源的创建和应用。 三.实验步骤: (1)创建一个名为Ex5的单文档MFC运用程序; (2)添加菜单项。 在主菜单“帮助”后面添加【曲线】、【线宽】和【颜色】3个主菜单项,如表所示: 主菜单 菜单项 ID 提示 曲线(&S) 正弦(&Z) ID_SIN 正弦曲线 余弦(&Y) ID_COS 余弦曲线 线宽(&W) 线宽2(&B) ID_WIDSP2 曲线宽度为2/n线宽2 线宽3(&C) ID_WIDSP3 曲线宽度为3/n线宽3 颜色(&C) 红色(&R) ID_COLR 曲线颜色为红色 蓝色(&L) ID_COLB 曲线颜色为蓝色 (3)创建快捷菜单如图所示: 在CMainFrame类里添加消息WM_CONTEXTMENU,并在OnContextMenu()函数中添加如下代码以实现快捷菜单的响应: voidCMainFrame: : OnContextMenu(CWnd*pWnd,CPointpoint) { //TODO: 在此处添加消息处理程序代码 CMenumenu; if(menu.LoadMenu(IDR_MENU1)) { CMenu*pPopup=menu.GetSubMenu(0); pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); } } (4)创建工具条,如图所示: 依次对应线宽2,线宽3,红色,蓝色 (5)添加代码: Ⅰ.添加成员变量及成员函数 选泽类视图,在视图类里面添加如下变量和如下函数: 成员变量 变量类型 变量名 说明 int m_able 标志菜单项是否有效,1为有效,0为无效 int m_typ 记录曲线类型,1为正弦,2为余弦 int m_wid 记录曲线线宽,可以、取1,2,3 COLORREF m_col 记录曲线颜色 成员函数 返回值类型 函数名 功能 doulble calsin(intx) 计算正弦值 doulble calcos(intx) 计算余弦值 void drawcurve(CDC*pDC) 绘制曲线 void drawline(CDC*pDC,intx1,inty1) 绘制直线 viod draw(CDC*pDC) 绘制坐标系 在构造函数中初始化变量: CEx5View: : CEx5View() : m_able(0) m_typ(0) m_wid (1) { //TODO: 在此处添加构造代码 m_col=RGB(0,0,0,); } Ⅱ添加成员函数代码: 在Ex5View.h文件中,在类的定义前面添加代码: constdoublePI=3.1416; 在Ex5View.cpp文件中,添加如下代码: #include"math.h" #include"MainFrm.h" 为表中各成员函数添加代码: doubleCEx5View: : calsin(intx) {doubley; y=sin(x*PI/180); returny; } doubleCEx5View: : calcos(intx) { doubley; y=cos(x*PI/180); returny; } voidCEx5View: : drawline(CDC*pDC,intx1,inty1,intx2,inty2) { pDC->MoveTo(x1,y1); pDC->LineTo(x2,y2); } voidCEx5View: : drawaxis(CDC*pDC) { CStringstr; CFontmyfont,*oldfont; myfont.CreatePointFont(80,"Arial",pDC);//属性配置中置为多字节字符集 oldfont=pDC->SelectObject(&myfont); drawline(pDC,50,10,50,290); drawline(pDC,45,150,780,150); for(inti=50;i<780;i=i+90) { drawline(pDC,i,145,i,150); str.Format("%d",i-50); if((i-50)! =0) pDC->TextOutA(i,155,str); } for(inti=0;i<11;i++) { drawline(pDC,50,50+20*i,55,50+20*i); str.Format("%.2f",1-0.2*i); if(i! =5) pDC->TextOutA(15,45+20*i,str); elsepDC->TextOutA(15,45+20*i,"0"); } pDC->SelectObject(oldfont); myfont.DeleteObject(); } voidCEx5View: : drawcurve(CDC*pDC) { drawaxis(pDC); CPointpoint[750]; CPenmypen,*oldpen; mypen.CreatePen(PS_SOLID,m_wid,m_col); oldpen=pDC->SelectObject(&mypen); for(inti=0;i<722;i++) { point[i].x=i+50; if(m_typ==1) point[i].y=(int)(150-calsin(i)*100); elseif(m_typ==2) point[i].y=(int)(150-calcos(i)*100); } for(inti=0;i<721;i++) drawline(pDC,point[i].x,point[i].y,point[i+1].x,point[i+ 1].y); pDC->SelectObject(oldpen); mypen.DeleteObject(); } Ⅲ建立消息映射 分别为菜单项添加如表所示的消息处理函数 ID 消息 消息处理函数 ID_SIN COMMAND OnSin() ID_COS COMMAND OnCos() ID_WIDSP2 COMMAND On32776()//线宽2 UPDATECOMMAND_UI OnUpdate32776() ID_WIDSP3 COMMAND On32777()//线宽3 UPDATECOMMAND_UI OnUpdate32777() ID_COLR COMMAND OnColr() UPDATECOMMAND_UI OnUpdateColr() ID_COLB COMMAND OnColb() UPDATECOMMAND_UI OnUpdateColb() 在消息处理函数中添加如下代码: voidCEx5View: : OnSin() { //TODO: 在此添加命令处理程序代码 m_typ=1; m_able=1; Invalidate(); } voidCEx5View: : OnCos() { //TODO: 在此添加命令处理程序代码 m_typ=2; m_able=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC net 五次 上机 实验 报告