VC++60上机操作指南.docx
《VC++60上机操作指南.docx》由会员分享,可在线阅读,更多相关《VC++60上机操作指南.docx(78页珍藏版)》请在冰豆网上搜索。
VC++60上机操作指南
VC++6.0上机操作指南
贵州大学计算机科学与技术学院
张志明
2006年9月
目录
1.VisualC++控制台应用程序上机实现步骤
2.MFC对话框应用程序实现举例
3.MFC单文档应用程序实现举例
4.用32位调试程序了解类和对象的内存映象
1.VisualC++控制台应用程序(Win32ConsoleApplicationProject)
上机实现步骤
一.单文件程序的实现
本教材中的程序在VisualC++环境下都是以Win32ConsoleApplication项目实现,而且都是单文件程序,即只含有一个源程序(.cpp)文件的C++程序。
一个单文件程序在VisualC++IDE中的实现主要步骤是:
(1)建立新项目
(2)建立新文件(3)输入源代码(4)编译、连接,生成可执行程序文件。
以上步骤均可在VisualC++的Wizard指导下通过对话框交互输入完成。
1.建立新项目:
每个C++程序的实现都要建立一个项目。
所谓项目是一个文件生成过程的管理单位,项目名称就是最后实现的可执行文件的名称,一个项目就是与生成这个可执行程序文件相关的所有源文件和中间文件的集合,存放在以项目名称命名的文件夹中。
图1MicrosoftVisualC++6.0系统初始界面
执行菜单命令File>New,打开New对话框:
图2打开New对话框
在New对话框的Project选项卡中选择Win32ConsoleApplication选项,然后输入项目存放位置项目名称后确定。
图3输入项目位置和名称
在Win32ConsoleApplication-Step1of1对话框中选择Anemptyproject,完成后返回。
系统弹出新建项目信息报告对话框。
图4Win32ConsoleApplication-Step1of1对话框
图5新建项目信息报告
2.建立新文件:
再一次执行菜单命令File>New,打开New对话框,在File选项卡中选择C++SourseFile选项,然后输入源程序文件名。
完成后系统打开源程序(.cpp)文件编辑窗口。
图6在New对话框输入源程序文件名
3.输入源代码:
此时即可在源程序(.cpp)文件编辑窗口输入源程序代码。
图7源程序(.cpp)文件编辑窗口
4.生成和运行可执行程序文件:
11从源程序文件生成可执行文件,需要经历编译,连接两步,在VC++6.0编程环境中可以有以下几种操作方式:
(1)打开Build(编译)菜单,先执行Compile命令,接着再执行Build命令。
(2)打开Build(编译)菜单,执行RebuildeAll命令。
(3)打开Build(编译)菜单,直接发出Execute执行命令,一次性完成编译、连接和启动程序执行的任务。
(4)直接单击“!
”(BuildExecute)命令按钮,一次性完成编译、连接和启动程序执行的任务。
图8Build(编译)菜单
图9程序运行结果
打开工程文件夹可以找到该工程的所有工作文件。
打开工程文件夹中的Debug子文件夹,可以找到生成的可执行(.exe)文件。
二.多文件程序的实现
一个较大型C++程序,有时需要包含多个源程序文件。
一种常见的情况是将类的定义放在头(.h)文件中,将类的实现或对类的访问放在源(.cpp)文件中。
多文件程序的实现与单文件程序的实现方式需要经历同样的步骤,不同的是,在编译之前需要利用新建文件对话框逐一将所有需要的文件追加到项目中。
1.建立新项目:
2.建立新文件:
(1)加入和编辑头文件:
在New对话框,在File选项卡中选择C/C++HeaderFile选项,然后输入头文件名。
完成后系统将打开源程序(.h)文件编辑窗口。
(2)加入和编辑源程序文件
打开New对话框,在File选项卡中选择C++SourseFile选项,然后输入源程序文件名。
完成后系统打开源程序(.cpp)文件编辑窗口。
注意:
在源程序文件中应该用文件包含命令将头文件包含进来。
如下例源程序文件s719.cpp的第一行:
#include"h719.h"
3.生成和运行可执行程序文件:
步骤同单文件程序的生成和执行。
#
2.MFC对话框应用程序实现举例
本指导书给出3个MFC对话框应用程序的实现实例,例1为求三科平均成绩的简单程序,例2为实现一个具有四则运算功能的简单计算器,例3为一个彩票机程序(提供手动摇号和自动摇号两个彩票机程序版本)。
通过这些程序可以达到以下目的:
掌握AppWizard的使用方法。
掌握Workshop中各种视图的使用和在不同视图之间切换的方法。
学会利用控件工具箱中的控件定制对话框界面。
学会控件变量及其他类成员变量的设置。
学会消息映射的概念和操作方法。
学会查看和编辑代码。
学习编译、运行和调试对话框应用程序。
例1.实现一个求三科平均成绩的MFC对话框应用程序。
假设运行时的界面如下:
实现步骤:
1.在VisualC++6.0工作开发环境中,New对话框中选择MFCAppWizard[exe]项目,输入项目名称并指定存放位置。
2.在MFCWizardStep1选择Dialog(基本对话)程序类型,在MFCWizardStep2中输入对话框标题“求平均成绩”。
AppWizard对话结束后打开对话框编辑窗口如下:
3.定制界面:
添加控件、设置属性
删除对话框模板中原有的“确定”按钮和内容为“TODO:
在这里设置对话控制。
”的StaticText控件。
在控件工具箱中取一个GroupBox控件,调整适当大小,鼠标右键单击该控件边框,在弹出的下拉菜单中打开属性对话框。
将GroupBox控件标题由“Static”改为“求平均分”。
在GroupBox中添加4个StaticText控件,按同样方法修改它们的标题属性为“成绩1”、“成绩2”、“成绩3”和“平均分”。
在GroupBox中添加4个EditBox控件,打开属性对话框的ExtendedStyles选项卡中将它们设置为文本右对齐(RightAligendText)方式。
其中第4个EditBox控件的Styles属性设置为Read-only。
在GroupBox中添加一个按钮Button1,打开属性对话框将按钮的标题属性改为“计算平均分”。
鼠标右键单击“取消”按钮边框,在弹出的下拉菜单中打开属性对话框。
将按钮标题改为“退出”。
设计完成的界面如图,其中控件属性列表如下:
控件
ID号
标题
属性
GroupBox
IDC_STATIC
求平均分
StaticText
IDC_STATIC
成绩1
StaticText
IDC_STATIC
成绩2
StaticText
IDC_STATIC
成绩3
StaticText
IDC_STATIC
平均分
EditBox
IDC_EDIT1
Aligntext:
Right
EditBox
IDC_EDIT2
Aligntext:
Right
EditBox
IDC_EDIT3
Aligntext:
Right
EditBox
IDC_EDIT4
Aligntext:
Right;Read-only
Button
IDC_BUTTON1
计算平均分
Button
IDCANCEL
退出
4.添加成员变量
单击View(查看)>ClassWizard(建立类向导)菜单进入ClassWizard,打开MemberVariables选项卡:
为4个EditBox控件设置对应的变量:
同样的方法为其它3个EditBox控件设置变量:
控件ID
变量名
变量类型
数值范围
IDC_EDIT1
m_S1
int
0~100
IDC_EDIT2
m_S2
int
0~100
IDC_EDIT3
m_S3
int
0~100
IDC_EDIT4
m_Sav
CString
5.添加消息映射(两条消息)
进入ClassWizard,打开MessagesMaps选项卡,在ObjectIds中选择CAverageDlg,在Messages中鼠标单击WM_INIDIALOG,在Memberfunctions中出现生成的消息映射成员函数OnInitDialog提示:
在ObjectIds中选择IDC_BUTTON1,在Messages中鼠标单击BN_CLIKED,在弹出对话框中单击OK按钮:
在Memberfunctions中出现第二个生成的消息映射成员函数OnButton1。
6.添加代码
在ClassWizard中双击OnInitDialog函数,打开代码编辑器中的OnInitDialog()函数代码,找到其中的//TODO:
Addextrainitializationhere,加入下面的黑体字给出的3行代码:
BOOLCDlgDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
…;
//TODO:
Addextrainitializationhere
m_Sav="0.00";
m_S1=m_S2=m_S3;
UpdateData(FALSE);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
在ClassWizard中双击OnButton1()函数,打开代码编辑器中的OnButton1()函数代码,找到其中的//TODO:
Addextrainitializationhere,加入下面的黑体字给出的4行代码:
voidCDlgDlg:
:
OnButton1()
{
//TODO:
Addextrainitializationhere
UpdateData();
doubleave=(double)(m_S1+m_S2+m_S3)/3.0;
m_Sav.Format("%6.2f",ave);
UpdateData(FALSE);
}
7.编译运行程序:
注释:
UpdateData()函数的作用是允许更新控件变量,
UpdateData(FALSE)禁止更新控件变量的值。
例2.设计MFC对话框应用程序,实现一个具有四则运算功能的简单计算器。
1.新建项目:
2.定制界面:
(1)修改MFCAppWizard自动创建的对话框项目模板。
删除模板上自动创建的三个控件。
(2)加入“简单计算器”、“请输入数据:
”、“结果”三个静态文本框和相应的3个编辑框。
(3)加入一个GroupBox,标题修改为“请选择运算符:
”,并在其中放入4个RadioButton将标题分别改为“+”、“-”、“*”、“/”。
(4)继续用鼠标从工具箱中向对话框添加和3个按钮控件,更改按钮的标题为“计算”、“清除”、“关闭”。
3.添加变量
本例中用到以下4个CSimpleCalcDlg类的成员变量:
变量类型
名称
float
m_N1
float
m_N2
float
m_Result
char
Operator
用ClassWizard为编辑框添加变量:
m_N1,m_N2,m_Result
变量charOperator的添加方法:
在WorkSpace中进入ClassView视图,鼠标右键单击CSimpleCalcDlg,在菜单中选择“AddMemberVariable…”
然后在弹出的对话框的输入变量类型和名称:
4.添加消息映射
用ClassWizard为按钮控件添加消息映射:
继续用ClassWizard为RadioButton控件添加消息映射:
5.加入单击按钮时的事件响应代码
在实现文件(cpp文件)中加入单击按钮时的事件响应代码。
(双击一个按钮可直接进入函数编辑)
//选择运算符
voidCSimpleCalcDlg:
:
OnRadio1()
{Operator='+';}
voidCSimpleCalcDlg:
:
OnRadio2()
{Operator='-';}
voidCSimpleCalcDlg:
:
OnRadio3()
{Operator='*';}
voidCSimpleCalcDlg:
:
OnRadio4()
{Operator='/';}
//计算
voidCSimpleCalcDlg:
:
OnButton1()
{
UpdateData();
switch(Operator)
{
case'+':
m_Result=m_N1+m_N2;
break;
case'-':
m_Result=m_N1-m_N2;
break;
case'*':
m_Result=m_N1*m_N2;
break;
case'/':
if(m_N2==0)
MessageBox("除数不能为零!
");
else
{
m_Result=m_N1/m_N2;
break;
}
default:
m_Result=m_N1+m_N2;
}
UpdateData(FALSE);
}
//清除
voidCSimpleCalcDlg:
:
OnButton2()
{
UpdateData();
m_N1=0;
m_N2=0;
m_Result=0;
UpdateData(FALSE);
}
//关闭
voidCSimpleCalcDlg:
:
OnButton3()
{CDialog:
:
OnOK();}
6.编译运行程序
例3.彩票机程序:
本例给出手动摇号和自动摇号两个彩票机程序版本。
1.彩票机界面:
定制含有7个EditBox、1个Progress(进度条)和3侦探按钮控件的对话框界面如下:
2.设置变量:
(1)设置进度条变量:
(2)设置7个编辑框变量:
(3)添加类成员变量m_x:
3.消息映射:
在ClassWizard中产生OnInitDialog、OnButton1、OnButton2、OnOK四个消息映射函数:
4.添加代码:
//初始化
BOOLCLotusDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
……
//TODO:
Addextrainitializationhere
m_x=0;
m_pProg.SetRange(0,70);
srand((unsigned)time(NULL));
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
(一)手动摇号
//手动摇号,每按一次摇号按钮出一个号
voidCLotusDlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
switch(m_x/10)
{
case0:
m_N1=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case1:
m_N2=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case2:
m_N3=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case3:
m_N4=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case4:
m_N5=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case5:
m_N6=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case6:
m_N7=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
}
UpdateData(FALSE);
}
voidCLotusDlg:
:
OnButton2()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_x=0;
m_N1=0;
m_N2=0;
m_N3=0;
m_N4=0;
m_N5=0;
m_N6=0;
m_N7=0;
UpdateData(FALSE);
m_pProg.SetPos
(1);
}
voidCLotusDlg:
:
OnOK()
{
CDialog:
:
OnOK();
}
(二)自动摇号
将前面实现的手动摇号程序修改为自动定时摇号。
添加OnTimer消息映射函数:
//按摇号按钮启动摇号
voidCLotusDlg:
:
OnButton1()
{
SetTimer(1,2000,NULL);
}
voidCLotusDlg:
:
OnButton2()
{
m_x=0;
m_N1=0;
m_N2=0;
m_N3=0;
m_N4=0;
m_N5=0;
m_N6=0;
m_N7=0;
UpdateData(FALSE);
m_pProg.SetPos(0);
KillTimer
(1);
}
voidCLotusDlg:
:
OnTimer(UINTnIDEvent)
{
switch(m_x/10)
{
case0:
m_N1=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case1:
m_N2=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case2:
m_N3=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case3:
m_N4=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case4:
m_N5=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case5:
m_N6=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case6:
m_N7=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
}
UpdateData(FALSE);
CDialog:
:
OnTimer(nIDEvent);
}
voidCLotusDlg:
:
OnOK()
{
KillTimer
(1);
CDialog:
:
OnOK();
}
5.注释:
(1)产生随机数的方法
函数unsignedintrand()产生随机数。
函数voidsrand(unsignedintseed)设定随机数产生器的种子,其中seed为随机数产生器的种子,本例中用系统时钟当前值作随机数种子:
srand((unsigned)time(NULL));函数的
表达式rand()%36+1产生1-36之间的随机数
(3)定时器的使用方法
定时器的使用涉及OnTimer、SetTimer、KillTimer三个函数。
SetTimer用于设定定时时间和启动定时器,其中第一个参数是定时编号,第二个参数是定时的毫秒数。
本例中将1号定时器定时时间设定为2秒:
SetTimer(1,2000,NULL);
定时器启动以后将持续工作,每到达一次定时时间即启动一次OnTimer消息函数的执行。
KillTimer的作用是停止指定定时器的工作。
3.
MFC单文档应用程序实现举例
创建单文档应用程序的一般步骤:
利用AppWizard创建单文档应用程序框架。
在文档类中声明保存文档数据所需要数据对象。
完成文档类的OnNewDocument函数,初始化新文档。
完成文档类的Serialize函数,保持和加载文档数据。
完成视类的OnInitialUpdate函数,初始化显示。
完成视类的OnDraw函数,显示当前文档内容。
在视类中加入可以使用户编辑文档数据所需的代码。
本实验指导通过以下4个实验循序渐进演示创建单文档应用程序的基本操作,在前一个例子中演练过的操作,在后面的中出现时不再重复描述。
例1一个简单的单文档应用程序——记事本程序
例2简单文本和图形输出
例3利用定时器输出滚动字幕
例4文档串行化编程
例1.
一个简单的单文档应用程序——记事本程序
1.只要在AppWizard的Step6将BaseClass设置为EditView,AppWizard就自动完成了一个记事本程序的设计:
2.运行程序,即可测试记事本的各种功能:
3.说明:
(1)打开Workshop中的Class视图,可以看到,一个简单的单文档应用程序向导自动建立五个类:
向导自动建立的类
相应源文件
其他源文件
相应头文件
其他头文件
CAboutDlg
StdAfx.cpp
StdAfx.h
CXxxApp
Xxx.cpp
Xxx.rc
Xxx.h
Resource.h
CXxxView
XxxView.cpp
XxxView.h
CXxxDoc
XxxDoc.cpp
XxxDoc.h
CMainFrame
MainFrame.cpp
MainFrame.h
(2)MFC的文档—视结构:
(3)每个类的主要函数:
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
intCMainFrame:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)//创建窗体的工具栏,状态栏等
BOOLC