VC程序设计实验指导.docx
《VC程序设计实验指导.docx》由会员分享,可在线阅读,更多相关《VC程序设计实验指导.docx(15页珍藏版)》请在冰点文库上搜索。
VC程序设计实验指导
VC++程序设计
实
验
指
导
:
书
李贵荣
!
计算机技术实验中心
前言
一、上机实验目的
上机实验的目的是提高学生的分析问题、解决问题的能力和动手能力,通过实践环节理解VisualC++面向对象与可视化开发工具的基本功能和用法,掌握MFC的类框架结构,学会使用VisualC++编写Windows应用程序。
二、实验基本内容
—
为了使学生在上机实验时目标明确,本实验指导书针对课程内容编写了4个必做实验。
学生可以在课内机时先完成指导书中给出的程序,理解所学的知识,在此基础上再编写其他应用程序。
指导书中的4个实验如下。
1.基本Windows程序设计(2H,必做)。
2.简单图形界面程序设计(2H,必做)。
3.多文档程序设计(2H,必做)。
4.综合性程序设计(4H,必做)。
三、实验任务与时间安排
《VisualC++程序设计》是一门实践性很强的课程,除了在课内安排的实验外,鼓励同学在课外用相关技术进行编程练习。
《VisualC++程序设计》上机实验时间为10学时,与教学内容同时进行上机实验。
10个上机学时分为4个必做实验。
¥
¥
实验一简单Windows程序设计
【实验目的】
1.学会创建VisualC++Win32应用程序工程文件。
2.掌握Windows应用程序的基本结构。
3.理解Windows编程中的窗口、句柄、消息传递等概念及其作用。
4.理解Windows图形设备接口的概念及了解常用Windows绘图函数。
5.学会在VisualC++中编译、调试、发布应用程序。
【实验性质】
验证性实验(学时数:
2H)
【实验要求】
1.在Windows下启动VisualC++,创建工程文件。
2.编写一个简单的Windows应用程序,并在程序中创建句柄,学会使用句柄。
3.分析上面的程序,在程序中使用注释语句标识出Windows程序的基本构成部分,并在注释语句中注明各部分的作用。
4.在上面程序中添加消息处理函数,使用程序完成如下功能:
(1)定义一只红色的画笔,绘制一个等边五边形;
(2)用不同颜色的线条连接互不想念的两个点;
(3)用不同颜色的画笔填充用上述方法所形成的图形中的每一个区域。
【参考程序】
#include<>
#include<>
#include<>
#include<>
#definePi
longWINAPIWndProc(HWNDhWnd,
UINTiMessage,
UINTwParam,
LONGlParam);
BOOLInitWindowsClass(HINSTANCEhInstance);HWNDhWndMain;
intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)returnFALSE;
if(!
InitWindows(hInstance,nCmdShow))returnFALSE;
while(GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);DispatchMessage(&Message);
}
return;
}
longWINAPIWndProc(HWNDhWnd,
UINTiMessage,
UINTwParam,
LONGlParam){
HDChDC;HBRUSHhBrush;POINTlpOuterPoints[5],lpInnerPoints[5];POINTlpTriangle[3];dfRadious1=dfRadious0*sin*Pi)/sin180*Pi);for(inti=0;i<5;i++)
{
lpOuterPoints[i].x=(long)(dfRadious0*cos(i*180*Pi))+200;
lpOuterPoints[i].y=(long)(dfRadious0*sin(i*180*Pi))+200;
lpInnerPoints[i].x=(long)(dfRadious1*cos(i*180*Pi+180*Pi))+200;
lpInnerPoints[i].y=(long)(dfRadious1*sin(i*180*Pi+180*Pi))+200;
}
switch(iMessage)
{
caseWM_PAINT:
hDC=BeginPaint(hWnd,&PtStr);SetWindowOrgEx(hDC,-100,-100,NULL);
hPen=CreatePen(PS_SOLID,1,RGB(255,0,0));SelectObject(hDC,hPen);Polygon(hDC,lpOuterPoints,5);for(i=0;i<5;i++)
{
lpTriangle[0]=lpOuterPoints[i%5];lpTriangle[1]=lpInnerPoints[i%5];
lpTriangle[2]=lpOuterPoints[(i+1)%5];
hBrush=CreateSolidBrush(RGB(i*10,i*20,i*30));
SelectObject(hDC,hBrush);Polygon(hDC,lpTriangle,3);lpTriangle[2]=lpInnerPoints[(i+4)%5];hBrush=CreateSolidBrush(RGB(i*40,i*30,i*20));SelectObject(hDC,hBrush);Polygon(hDC,lpTriangle,3);}
hBrush=CreateSolidBrush(RGB(255,255,255));SelectObject(hDC,hBrush);Polygon(hDC,lpInnerPoints,5);
MoveToEx(hDC,lpOuterPoints[0].x,lpOuterPoints[0].y,NULL);
for(i=1;i<=5;i++)
{
hPen=CreatePen(PS_SOLID,1,RGB(0,i*51,0));
SelectObject(hDC,hPen);
LineTo(hDC,lpOuterPoints[(i+2)%5].x,lpOuterPoints[(i+2)%5].y);
}
hPen=(HPEN)(GetStockObject(PS_NULL));
DeleteObject(hPen);DeleteObject(hBrush);EndPaint(hWnd,&PtStr);return0;
caseWM_DESTROY:
PostQuitMessage(0);return0;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
}
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow)hWnd=CreateWindow("Polygon","五边形",WS_OVERLAPPEDWINDOW,边框,标题栏,系统菜单和最大和最小按钮.
CW_USEDEFAULT,0,CW_USEDEFAULT,NULL,hInstance,NULL);if(!
hWnd)returnFALSE;
hWndMain=hWnd;ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);returnTRUE;
}
BOOLInitWindowsClass(HINSTANCEhInstance){
WNDCLASSWndClass;=0;=0;=(HBRUSH)(GetStockObject(WHITE_BRUSH));=LoadCursor(NULL,IDC_ARROW);=LoadIcon(NULL,IDI_APPLICATION);=hInstance;=WndProc;="Polygon";=NULL;returnRegisterClass(&WndClass);}
实验二简单界面设计
【实验目的】
使用MFC应用程序向导,生成Windows基本对话框。
通过对Windows基本对话框的学习和使用,了解MFC的类库结构,掌握CDialog的基本组成,了解对话框程序的工作过程,学习使用常用的Windows控件,学会编写消息处理函数。
【实验性质】
验证性实验(学时数:
2H)
【实验要求】
使用MFC应用程序向导编写一个基本对话框程序。
在程序综合运用静态文本框、编辑框、按钮控件,在程序练习使用文件对话框、颜色选择对话框、字体对话框、打印对话框等常用类。
【实验内容】
编写一个简单的计算器程序,要求有两个操作数,实现加、减、乘、除。
参考界面如下图:
."menuitemtosystemmenu.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
(IDS_ABOUTBOX);
if(!
())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
Theframeworkdoesthisautomatically
HCURSORCMy11_4Dlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
voidCMy11_4Dlg:
:
OnDifferenceButton()
{
doubledfItem1,dfItem2,dfResult;charcBuffer[10];
(cstrItem1,10);(cstrItem2,10);dfItem1=atof((LPCTSTR)cstrItem1);dfItem2=atof((LPCTSTR)cstrItem2);dfResult=dfItem1-dfItem2;储在cbuffer中.
m_sResult_Edit=(LPCTSTR)cBuffer;}
voidCMy11_4Dlg:
:
OnAddButton(){
charcstrItem1[10],cstrItem2[10];doubledfItem1,dfItem2,dfResult;charcBuffer[50];
(cstrItem1,10);(cstrItem2,10);dfItem1=atof((LPCTSTR)cstrItem1);dfItem2=atof((LPCTSTR)cstrItem2);dfResult=dfItem1+dfItem2;储在cbuffer中.
m_sResult_Edit=(LPCTSTR)cBuffer;}
voidCMy11_4Dlg:
:
OnMultipleButton(){
charcstrItem1[10],cstrItem2[10];doubledfItem1,dfItem2,dfResult;charcBuffer[10];
(cstrItem1,10);(cstrItem2,10);dfItem1=atof((LPCTSTR)cstrItem1);dfItem2=atof((LPCTSTR)cstrItem2);dfResult=dfItem1*dfItem2;储在cbuffer中.
m_sResult_Edit=(LPCTSTR)cBuffer;
}
voidCMy11_4Dlg:
:
OnDevideButton(){
charcstrItem1[10],cstrItem2[10];doubledfItem1,dfItem2,dfResult;charcBuffer[10];(cstrItem1,10);(cstrItem2,10);dfItem1=atof((LPCTSTR)cstrItem1);dfItem2=atof((LPCTSTR)cstrItem2);dfResult=dfItem1/dfItem2;储在cbuffer中.
m_sResult_Edit=(LPCTSTR)cBuffer;}
voidCMy11_4Dlg:
:
OnExitButton(){
OnOK();}
实验三多文档程序设计
【实验目的】
了解Windows程序的文档、视图结构的基本概念,学会使用AppWizard创建基于文档/视图结构的框架应用程序以及文档类、视图类和文档模板类的应用。
【实验性质】
验证性实验(学时数:
2H)
【实验要求】
1.掌握MicrosoftMFC中支持的文档/视图结构的基本概念,学会通过应用程序向导生成单文档(SDI)和多文档应用程序(MDI)。
2.编写简单单文档界面应用程序。
3.编写简单多文档界面应用程序。
【实验内容】
(一)单文档界面程序设计
创建一个应用程序,其界面的标题为MySdi。
在应用程序的主窗口中显示一行文本“您好,单文档界面的例程!
”,并始终出现在窗口的中央。
在“编辑”菜单上有一个菜单项“改变显示文本”,单该项可以弹出一个对话框,通过这个对话框可以改变主窗口中的显示文本。
(1)创建工程文件
首先创建一个MFCAppWizard(exe)工程文件,并取名为MySdi。
建立MySdi应用程序工程文件时选择SingleDocument(单文档)选项,其他的都是默认选项。
(2)添加资源
为程序添加一个简单对话框CDlgInput,其中有一个文本输入控件IDC_EDIT1,关联的成员变量为m_input,类型为CString。
操作过程如前面对话框实验。
(3)为CMysdiDoc类添加成员变量
为CMysdiDoc类添加成员变量可以有两种方法。
第一种方法是利用VC的可视化编程工具。
在Workspace窗口的ClassView选项卡中展开MysdiClasses,可以看到AppWizard为Mysdi程序生成的所有类。
右击CMysdiDoc类,在弹出菜单中单击AddMemberVariable选项,在VariableType框中输入成员变量的类型CString,在VariableDeclaration框中输入成员变量名m_str。
由于希望其他类的对象可以访问该成员变量,因此访问类型设置为public。
单击OK将该成员变量的定义添加到类的定义中。
第二种方法是手动的在CMysdiDoc的定义()中添加,直接为其添加一个成员变量。
public:
CStringm_str;
(4)文档变量初始化
为了测试该程序,我们在CMsdiDoc的OnNewDocument成员变量中为公有成员m_str赋以“您好,单文档界面的例程!
”,方法是使用下面的代码替换OnNewDocument的实现代码中的“md)\\\nMymdiDocument"
这是第一个文档类的的资源字符串,在后面加入:
IDR_MYMDITYPE2"\nMymdi2\nMymdi2\nMymdi2文件(*.mm2)\\\nMymdi2Document"
这是第二个文档类的资源字符串。
(4)菜单、对话框资源
单击Workplace窗口中的ResourceView选项卡,展开MyMdiresources|Menu,在“编辑”子菜单中添加一个新的菜单项“改变显示文本”,并将此菜单项的ID设置为ID_EDIT_CHANGETEXT。
使用对话框实验中的方法,生成对话框类CDlgInput,并添加EditBox控件及其相关联的成员变量m_input,类型为CString。
(5)代码编辑
创建文档模板类,因为本应用程序支持多种文档,所以在应用程序的InitInstance()函数中,需要定义新的文档模板的对象,打开文件,查找如下代码:
BOOLCMymdiApp:
:
InitInstance()
{
AfxEnableControlContainer();
……..
CMultiDocTemplate*pDocTemplate;
pDocTemplate=newCMultiDocTemplate(
IDR_MYMDITYPE,
RUNTIME_CLASS(CMymdiDoc),
RUNTIME_CLASS(CChildFrame),
上面是第一个文档的模板,下面在它的后面添加第二个文档的模板,代码如下:
CMultiDocTemplate*pDocTemplate;
pDocTemplate=newCMultiDocTemplate(
IDR_MYMDITYPE,
RUNTIME_CLASS(CMymdiDoc),
RUNTIME_CLASS(CChildFrame),//customMDIchildframe
RUNTIME_CLASS(CMymdiView));
AddDocTemplate(pDocTemplate);
CMultiDocTemplate*pDocTemplate2;
pDocTemplate2=newCMultiDocTemplate(
IDR_MYMDITYPE2,
RUNTIME_CLASS(CMymdiDoc2),//MDI派生文档类的CRuntimeClass对象的指针
RUNTIME_CLASS(CChildFrame),//MDI派生子框架类的CRuntimeClass对象的指针
RUNTIME_CLASS(CMymdiView2));//创建文档模板的对象
AddDocTemplate(pDocTemplate2);//将新模板添加到应用程序的文档模板列表中
为了使CMyMdiApp类能够访问第二个文档/视图,需要在中加入它们的头文件。
#include""
#include""
完善CMyMdiDoc2类,部分代码如下:
BOOLCMymdiDoc2:
:
OnNewDocument()
{
if(!
CDocument:
:
OnNewDocument())
returnFALSE;
m_str="您好,多文档界面的例程!
";
returnTRUE;
}
voidCMymdiDoc2:
:
Serialize(CArchive&ar)
{
if())
{
ar<}
else
{
ar>>m_str;//读取文档内容
}
}
/////////////////////////////////////////////////////////////////////////////
//CMymdiDoc2commands
voidCMymdiDoc2:
:
OnEditChangetext()
{
//TODO:
Addyourcommandhandlercodehere
CDlgInputinputDlg;//建立一个CinputDlg的对象inputDlg
if(()==IDOK)//使inputDlg成为一个模式对话框
{
m_str=;//获取输入的字符串
UpdateAllViews(NULL);//更新视图
}
}
视图输出,需要在CMyMdiView2:
:
OnDraw(CDC*pDC)中添加下列代码:
voidCMymdiView2:
:
OnDraw(CDC*pDC)
{
CMymdiDoc2*pDoc=(CMymdiDoc2*)GetDocument();
ASSERT_VALID(pDoc);
//TODO:
Addyourspecializedcodehereand/orcallthebaseclass
CRectrectClient;//获取当前客户区的大小
GetClientRect(rectClient);
CSizesizeClient=();
CStringstr=pDoc->m_str;//从文件中读取数据
CSizesizeTextExtent=pDC->GetTextExtent(str);//用新选定的字体绘制字符串
pDC->TextOut(str);
}
实验四综合设计实验
【实验目的】
了解VisualC++开发环境的常用功能,使用VisualC++编写对话框/文档视图结构程序,综合运用C++的面向对象程序设计方法,了解MFC类库结构和掌握常用MFC类,学会运用VisualC++较熟练开发MFC应用程序。
【实验性质】
综合性实验(学时数:
4H)
【实验要求】
1.了解MFC类库结构,熟悉常用的MFC类。
2.根据个人特点和兴趣,使用VisualC++设计一个功能较完善的Windows应用程序。
3.内容可以选择下面的内容之一:
(1)多媒体应用程序
(2)数据库应用程序
(3)网络应用程序
4.人机界面要求:
主界面的菜单项/按钮不少于5个,其功能均要求实现;对话框不少于3个。
5.程序的文档要求:
要求程序的说明和注释尽可能详尽,通过注释能够反映出程序的思路和执行流程。
【实验内容】
本次实验为设计型实验,实验内容由学生根据自身