计算机科学与技术《Vc 程序设计》实验指导书-07计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《VC++ 程序设计》实验指导书
金韬编
沈阳大学信息学院
目录
实验一:Visual C++ 6.0中文版开发环境 (2)
实验二:C++基础(1) (5)
实验二:C++基础(2) (6)
实验四:Windows编程基础 (8)
实验五:对话框程序设计 (11)
实验六:常用控件(1) (13)
实验七:常用控件(2) (16)
实验八:常用控件(3).............................................................. 错误!未定义书签。
实验九:常用控件(4) (18)
实验十:菜单、工具栏和状态栏 (24)
实验十一:框架窗口和文档 (27)
实验十二:图形和文本 (32)
实验十三:数据库(1) (33)
实验十四:数据库(2) (37)
实验十五:动态链接库 (38)
课程编号:11241091课程类别:专业必修
适用层次:本科适用专业:计算机科学与技术
课程总学时:80适用学期:第7学期
实验学时:30开设实验项目数:15
撰写人:金韬审核人:刘天惠教学院长:范立南
实验一:Visual C++ 6.0中文版开发环境
一、实验目的与要求
熟悉Visual C++ 6.0的开发环境,输入并编译一个C++程序。
用应用程序向导创建一个控制台应用项目Ex_Hello,完成输入半径,计算圆的面积的功能。
二、实验类型
验证型
三、实验原理及说明
(1)熟悉Visual C++ 6.0的开发环境(工具栏及各种窗口)。
(2)掌握显示和隐藏工具栏的方法。
(3)掌握用应用程序向导创建一个控制台应用项目的一般步骤。
四、实验仪器
五、实验内容和步骤
1.启动Windows 2000操作系统
打开计算机,启动Windows 2000操作系统。
2.启动Visual C++ 6.0
选择“开始”→“程序”→Microsoft V isual Studio 6.0→Microsoft V isual C++ 6.0,运行Visual C++ 6.0。
第一次运行时,将显示“当时的提示”对话框。
单击“下一个提示”按钮,可看到有关各种操作的提示。
如果取消选中“再启动时显示提示”复选框,那么下一次运行Visual C++ 6.0,将不再出现此对话框,如图1.1所示。
3.认识开发环境界面
4.显示和隐藏工具栏
在开发环境中工具栏或菜单栏处右击鼠标,将会弹出一个包含工具栏名称的快捷菜单,凡显示在开发环境上的工具栏,其相应的菜单项前面就会有选中标记√。
对相应的工具栏进行选择将使其显示或隐藏。
5.创建和编连控制台应用项目
在Visual C++ 6.0中,用应用程序向导创建和编连一个控制台应用程序,可按下列步骤进行:
①选择“文件”→“新建”菜单命令,显示出“新建”对话框,如图1.6所示。
图1.6 新建一个工程
②选择“工程”标签,并从列表框中选中Win32 Console Application项。
③在“工程”编辑框中键入控制台应用程序项目名称Ex_Hello。
④单击“确定”按钮,显示Win32应用程序向导对话框。
第一步是询问项目类型,如图1.7所示。
图1.7 控制台应用程序的第1步
⑤选中A “Hello, World!” application项。
单击“完成”按钮,系统将显示向导创建的信息,单击“确定”按钮将自动创建此应用程序。
⑥默认时,项目工作区窗口显示的是ClassView页面,将所有内容展开,双击main项,在文档窗口中将main函数体中的"Hello World!\n"改为"I Like Visual C++ 6.0中文版!\n",结果如图1.8所示。
图1.8 修改代码
说明:在输入字符和汉字时,要切换到相应的输入方法中,除了字符串和注释可以使用汉字外,其余一律采用英文字符输入。
代码中,stdafx.h 是每个应用程序所必有的预编译头文件,程序所用到的Visual C++头文件包含均添加到这个文件中。
⑦ 单击编译工具条上的生成工具按钮或直接按快捷键F7,系统开始对Ex_Hello 进行编译、连接,同时在输出窗口中观察出现的内容,当出现:
表示Ex_Hello.exe 可执行文件已经正确无误地生成了。
⑧ 单击编译工具条
上的运行工具按钮
或直接按快捷键Ctrl+F5,就
可以运行刚刚生成的Ex_Hello.exe 了,结果如图1.9所示。
6.输入并编译一个新的C++程序
① 选择“文件”→“关闭工作区”菜单,关闭原来的项目。
② 按上面的方法创建一个Win32 Console Application 项目Ex_Simple ,在向导的第一步中选择An empty project 类型。
③ 再次选择“文件”→“新建”菜单命令,显示出“新建”对话框“文件”页面,如图1.10所示。
图1.10 “新建”对话框的“文件”页面
④ 在文件类型列表中选择C++ Source File ,然后在“文件”框中输入要创建的文件名Ex_Simple ,文件扩展名可以不必输入,系统会自动添加cpp 扩展名(cpp 是C Plus Plus 的缩写,即C++的意思)。
单击“确定”按钮,在打开的文档窗口中输入下列C++代码:
/*程序Ex_Simple ,一个简单的C++程序*
/
// C++程序的基本结构 #include <iostream.h>
void main() { double r, area; // 声明变量
cout<<"输入圆的半径:"; // 显示提示信息
cin>>r; // 从键盘上输入变量r 的值 area = 3.14159 * r * r;
// 计算面积 cout<<"圆的面积为:"<<area<<"\n";
// 输出面积
}
⑤ 此时在文档窗口中所有代码的颜色都发生改变,这是V isual C++ 6.0的文本编辑器
图1.9 运行结果
所具有的语法颜色功能如图1.11所示。
其中,绿色表示注释,蓝色表示关键词等。
图1.11 编辑器的代码语法颜色功能
⑥按快捷键F7,系统开始编译。
编译后,再按快捷键Ctrl+F5就可运行了。
说明:对于C/C++语言工程项目的创建,凡没有特别说明,均采用此方法。
7.退出Visual C++ 6.0
退出Visual C++ 6.0有两种方式:一种是单击主窗口右上角的“关闭”按钮,另一种是选择File→Exit菜单。
六、实验运行结果
写出程序的运行结果。
七、选做题:
任意输入长方形的长和宽,求长方形的周长和面积。
#include <iostream.h>
void main()
{
double leng,wide, area,c;
cout<<"长方形的长:";
cin>>leng;
cout<<"长方形的宽:";
cin>>wide;
area = leng * wide;
c=(leng + wide)*2;
cout<<"面积为:"<<area<<"\n";
cout<<"周长为:"<<c<<"\n";
}
实验二:C++基础(1)
一、实验目的与要求
创建一个Win32 Console Application项目,完成的功能为:定义一个人员类CPerson,包括数据成员:姓名、编号和用于输入输出姓名和编号的成员函数。
在此基础上派生出职员类Cworker增加工资,并实现对职员基本信息的输入输出。
二、实验类型
设计型
三、实验原理及说明
类的定义、继承和派生类的方法。
四、实验仪器
五、实验内容和步骤
1.启动Visual C++ 6.0
启动Visual C++ 6.0系统。
2.创建工程并添加代码
①选择“文件”→“新建”菜单命令,打开应用程序向导,显示出“新建”对话框。
单击“工程”标签,从列表框中选中Win32 Console Application项。
在工程名称框中输入Win32应用程序项目名称。
②单击“确定”按钮继续。
在向导第一步对话框中,选中An empty project(一个空的工程)项。
单击“完成”按钮,系统将显示AppWizard(应用程序向导)的创建信息,单击“确定”按钮,系统将自动创建此应用程序。
③再次选择“文件”→“新建”菜单命令,显示出“新建”对话框。
单击“文件”标签,在左边的列表框中选择C++ Source File项,在右边的“文件”下的编辑框中输入Ex_SDK.cpp,单击“确定”按钮。
④在打开的文档窗口中输入代码。
3.运行并测试
编译并运行程序。
六、实验运行结果
写出程序的运行结果。
七、选做题
定义一个圆类完成求圆的面积和圆的周长程序。
实验三:C++基础(2)
一、实验目的与要求
定义一个抽象类CShape,包含纯虚函数Area(用来计算面积)。
派生出三角形CTriangle 类、圆CCircle类,分别求其面积。
二、实验类型
设计型
三、实验原理及说明
虚函数和抽象类的用法。
四、实验仪器
五、实验内容和步骤
1.启动Visual C++ 6.0
启动Visual C++ 6.0系统。
2.创建工程并添加代码
①选择“文件”→“新建”菜单命令,打开应用程序向导,显示出“新建”对话框。
单击“工程”标签,从列表框中选中Win32 Console Application项。
在工程名称框中输入Win32应用程序项目名称Ex_virtual。
②单击“确定”按钮继续。
在向导第一步对话框中,选中An empty project(一个空的工程)项。
单击“完成”按钮,系统将显示AppWizard(应用程序向导)的创建信息,单击“确定”按钮,系统将自动创建此应用程序。
③再次选择“文件”→“新建”菜单命令,显示出“新建”对话框。
单击“文件”标签,在左边的列表框中选择C++ Source File项,在右边的“文件”下的编辑框中输入Ex_ virtual.cpp,单击“确定”按钮。
④在打开的文档窗口中输入下面的代码:
#include <iostream.h>
class CShape
{
public:
virtual float area() = 0; // 将area定义成纯虚函数
};
class CTriangle:public CShape
{
public:
CTriangle(float h, float w)
{
H = h; W = w;
}
float area() // 在派生类定义纯虚函数的具体实现代码
{
return (float)(H * W * 0.5);
}
private:
float H, W;
};
class CCircle:public CShape
{
public:
CCircle(float r)
{
R = r;
}
float area() // 在派生类定义纯虚函数的具体实现代码
{
return (float)(3.14159265 * R * R);
}
private:
float R;
};
void main()
{
CShape *pShape;
CTriangle tri(3, 4);
cout<<tri.area()<<endl;
pShape = &tri;
cout<<pShape->area()<<endl;
CCircle cir(5);
cout<<cir.area()<<endl;
pShape = ○
cout<<pShape->area()<<endl;
}
3.运行并测试
编译并运行程序,显示结果。
六、实验运行结果
写出程序的运行结果。
七、选做题:
补充上面程序,完成任意输入正方形的边长,求面积。
实验四:Windows编程基础
一、实验目的与要求
创建一个Win32应用程序,当单击鼠标左键时,弹出你好消息框。
二、实验类型
验证型
三、实验原理及说明
使学生熟悉windows应用程序的基本结构。
四、实验仪器
五、实验内容和步骤
1.启动Visual C++ 6.0
打开计算机,启动Visual C++ 6.0系统。
2.创建工程并添加代码
①选择“文件”→“新建”菜单命令,打开应用程序向导,显示出“新建”对话框。
单击“工程”标签,从列表框中选中Win32 Application(Win32 应用程序)项。
在工程名称框中输入Win32应用程序项目名称Ex_SDK。
②单击“确定”按钮继续。
在向导第一步对话框中,选中An empty project(一个空的工程)项。
单击“完成”按钮,系统将显示AppWizard(应用程序向导)的创建信息,单击“确定”按钮,系统将自动创建此应用程序。
③再次选择“文件”→“新建”菜单命令,显示出“新建”对话框。
单击“文件”标签,在左边的列表框中选择C++ Source File项,在右边的“文件”下的编辑框中输入Ex_SDK.cpp,单击“确定”按钮。
④在打开的文档窗口中输入下面的代码:.找出错误,考察程序运行的结果。
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); // 窗口过程
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hwnd ; // 窗口句柄
MSG msg ; // 消息
WNDCLASS wndclass ; // 窗口类
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICA TION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;// IDC_CROSS
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//BLACK
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = "HelloWin"; // 窗口类名
if (!RegisterClass (&wndclass)) // 注册窗口
{
MessageBox (NULL, "窗口注册失败!", "HelloWin", 0) ;
return 0 ;
}
// 创建窗口
hwnd = Create ("HelloWin", // 窗口类名
"我的窗口", // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, // 窗口最初的x 位置
CW_USEDEFAULT, // 窗口最初的y 位置
CW_USEDEFAULT, // 窗口最初的x 大小
CW_USEDEFAULT, // 窗口最初的y 大小
NULL, // 父窗口句柄
NULL, // 窗口菜单句柄
hInstance, // 应用程序实例句柄
NULL) ; // 创建窗口的参数Window (hwnd, nCmdShow) ; // 显示窗口
UpdateWindow (hwnd) ; // 更新窗口,包括窗口的客户区
// 进入消息循环:当从应用程序消息队列中检取的消息是WM_QUIT时,则退出循环。
while (Message (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ; // 转换某些键盘消息
DispatchMessage (&msg) ; // 将消息发送给窗口过程,这里是WndProc }
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message)
{
case WM_CREA TE: // 窗口创建产生的消息
return 0 ;
case WM_LBUTTONDOWN:
MessageBox(NULL,"你好,我的VC++世界!","问候",0);
return 0 ;
case WM_DESTROY: // 当窗口关闭时产生的消息
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ; // 执行默认的消息处理
}
3.运行并测试
编译并运行程序显示如图4.1所示。
图4.1 Ex_SDK运行结果
六、实验运行结果
写出程序的运行结果。
实验五:对话框程序设计
一、实验目的与要求
创建一个默认的单文档应用程序,在单文档应用程序添加对话框,实现单击应用程序菜单显示图5.1中的对话框功能。
图5.1 Ex_SDI对话框
二、实验类型
设计型
三、实验原理及说明
掌握创建和添加对话框及对话框类的方法。
四、实验仪器
五、实验内容和步骤
1.启动Visual C++ 6.0
打开计算机,启动Visual C++ 6.0系统。
创建一个默认的单文档应用程序项目。
添加了一个对话框资源。
选择“插入”-> “资源”菜单,或按快捷键Ctrl+R打开“插入资源” 对话框中。
选中“Dialog”,单击[新建]按钮,系统就会自动为当前应用程序添加了一个对话框资源。
设置对话框属性:将对话框标识符改成IDD_DIALOG_FIRST;
将对话框标题改为“我的第一个对话框”;添加和布局控件。
2.创建对话框类
在对话框资源模板的空白区域(没有其他元素或控件)内双击鼠标,将弹出图5.2对话框:
图5.2 图 5.3
单击[OK]按钮,弹出图 5.3 所示的对话框。
在Name框中输入类名CFirstDlg,单击[OK]按钮,一个基于对话框资源模板的用户对话框类CFirstDlg就创建好了。
3.添加测试菜单
单击“测试”菜单项下方的空位置,在属性对话框中,输入标题“对话框(&D)”,在ID框输入该菜单项的资源标识; ID_TEST_DLG,结果如图 5.4所示:
图 5.4 属性对话框
6.添加对话框代码
在成员函数中添加下列代码:
void CMainFrame::OnTestDlg()
{
CFirstDlg dlg; // 定义对话框类对象
dlg.DoModal(); // 显示对话框
}
7.编译运行并测试。
六、实验运行结果
写出程序的运行结果。
七、选择题:
在“测试”菜单项下添加“第二个对话框“菜单,单击时显示第二个对话框如下图:单击“计算”按钮,计算出总价=单价*数量的结果。
实验六:常用控件(1)
一、实验目的与要求
(1)创建一个上网问卷调查对话框应用程序,如图6.1所示。
图6.1 上网问卷调查对话框图6.2 对话框
(2)实现功能:单击图6.1中的“确定”按钮,弹出图6.2 对话框,单击“取消”按钮,退出应用程序。
二、实验类型
验证型
三、实验原理及说明
掌握按钮控件、组框控件和静态文本控件的使用方法。
四、实验仪器
五、实验内容和步骤
1.启动Visual C++ 6.0
打开计算机,启动Visual C++ 6.0系统。
2. 创建并设计对话框
(1) 在组框内添加4个单选按钮,默认的ID依次为_RADIO1、IDC_RADIO2、IDC_RADIO3和IDC_RADIO4。
(2)接下来添加一个静态文本,标题设为“你使用的接入方式:然后在其下再添加4个单选按钮,标题分别是“FTTL或ADSL”、“单位LAN”、“拨号56K”和“其他”,并将相应的ID属性依次改成:IDC_CM_FTTL、DC_CM_LAN、IDC_CM_56K和IDC_CM_OTHER。
(3)对话框的下方,再添加一个组框控件,标题为“你上网主要是”。
添加四个复选框,其标题分别为“收发邮件”、“浏览资料”、“聊天游戏”和“其他”,ID分别为IDC_DO_POP、IDC_DO_GAME和IDC_DO_OTHER。
(4)分别将这二个问题中的第一个单选按钮的Group(组)属性均选中。
(5)单击对话框编辑器工具栏上的切换辅助线按钮,然后将对话框中的控件调整到辅助线以内,并适当对其他控件进行调整。
整个问卷调查的对话框就设计好了,单击工具栏上的
测试对话框按钮。
3. 完善代码
将项目工作区切换到ClassView(类视图)页面,展开类CEx_ResearchDlg的所有成员,双击OnInitDialog函数名就会在文档窗口中自动定位到该函数的实现代码处,在此函数添加下列初始化代码:
BOOL CEx_ResearchDlg::OnInitDialog()
{
CDialog::OnInitDialog();
…
CheckRadioButton(IDC_AGE_L18, IDC_AGE_M38,
IDC_AGE_18T27);
CheckRadioButton(IDC_CM_FTTL, IDC_CM_OTHER,
IDC_CM_FTTL);
CButton* pBtn = (CButton*)GetDlgItem(IDC_DO_POP);
pBtn->SetCheck(1); // 使“收发邮件”复选框选中
return TRUE;
}
用MFC ClassWizard在CEx_ResearchDlg类中添加IDOK按钮BN_CLICKED消息映射,并添加下列代码,使得用按[确定]按钮取用户所作的选择内容。
void CEx_ResearchDlg::OnOK()
{
CString str, strCtrl;
// 定义两个字符串变量,CString是操作字串的MFC类
// 获取第一个问题的用户选择
str = "你的年龄:";
UINT nID = GetCheckedRadioButton( IDC_AGE_L18, IDC
_AGE_M38);
GetDlgItemText(nID, strCtrl); // 获取指定控件的标题文本
str = str + strCtrl;
// 获取第二个问题的用户选择
str = str + “\n你使用的接入方式:
nID = GetCheckedRadioButton( IDC_CM_FTTL, IDC_CM_OTHER);
GetDlgItemText(nID, strCtrl); // 获取指定控件的标题文本
str = str + strCtrl; // 获取第三个问题的用户选择str = str + "\n你上网主要是:\n";
UINT nCheckIDs[4] = {IDC_DO_POP, IDC_DO _READ, IDC_DO_GAME, IDC_DO_OTHER};
CButton* pBtn;
for (int i=0; i<4; i++) {
pBtn = (CButton*)GetDlgItem(nCheckIDs[i]);
if ( pBtn->GetCheck() ) {
pBtn->GetWindowText( strCtrl );
str = str + strCtrl;
str = str + " ";
}
}
MessageBox( str );
CDialog::OnOK();
}
4.编译运行并测试。
六、实验运行结果
写出程序的运行结果。
七、选做题:
做如下问卷调查。
void CDanxuanDlg::OnButton1()
{
CString str, strCtrl;
str = "你的选择为:";
UINT nID = GetCheckedRadioButton( IDC_RADIO1, IDC_RADIO4);
GetDlgItemText(nID, strCtrl); // 获取指定控件的标题文本
str = str + strCtrl;
MessageBox( str );
}
实验七:常用控件(2)
一、实验目的与要求
设计一个“学生基本信息”对话框,求学生成绩总分、平均分。
图“学生基本信息”对话框
二、实验类型
验证型
三、实验原理及说明
掌握编辑框、按钮控件的使用方法。
四、实验仪器
五、实验内容和步骤
1.启动Visual C++ 6.0
2.创建一个默认的对话框应用程序chengji.
①选择“文件”→“新建”菜单,在弹出的“新建”对话框中选择“工程”页面,选择MFC AppWizard(exe),在工程框中输入chengji.
②单击“确定”按钮,在出现的Step 1对话框中选择“基本对话(框)”应用程序类型,单击“完成”按钮。
3向对话框添加如表所示的控件。
表学生基本信息对话框添加的控件
4 按Ctrl+W打开ClassWizard的Member V ariables页面,选中所需的控件ID号,双击鼠标。
依次为控件增加成员变量。
表控件变量
5双击按钮IDC_BUTTON1,并添加下列代码:
void CChengjiDlg::OnButton1()
{
UpdateData(true);
m_zongfen=m_yuwen+m_shuxue+m_yingyu;
UpdateData(false);
}
6双击按钮IDC_BUTTON2,并添加下列代码:
void CChengjiDlg::OnButton2()
{float aa;
CString str;
UpdateData();
aa=(m_yuwen+m_shuxue+m_yingyu)/3;
str.Format("%s%s%4.1f",m_xingmin g,"平均分为",aa);
MessageBox(str);
UpdateData(false);
}
6编译运行并测试。
六、实验运行结果
写出程序的运行结果。
七、选做题:
编写如下程序:
void CSyanDlg::OnButton1()
{
UpdateData();
CString str, strctr;
UINT nID = GetCheckedRadioButton( IDC_RADIO1, IDC_RADIO1); GetDlgItemText(nID, strctr);
str=m_name+" "+m_num+" "+strctr+" "+m_kecheng1+" "
+m_kecheng2+" "+m_kecheng3;
m_list.AddString (str);
}
实验八:常用控件(3)
一、实验目的与要求
编写一个选修课程程序。
完成添加新课程、删除已选课程、清空所有已选课程程序。
二、实验类型
验证型
三、实验原理及说明
掌握列表框控件的使用方法。
四、实验仪器
五、实验内容和步骤
1.启动Visual C++ 6.0
2.创建对话框应用程序kecheng,并设计其界面
①选择“文件”→“新建”菜单,在弹出的“新建”对话框中选择“工程”页面,选择MFC AppWizard(exe),在工程框中输入kecheng。
②单击“确定”按钮,在出现的Step 1对话框中选择“基本对话(框)”应用程序类型,单击“完成”按钮。
3调整对话框的大小,删除对话框中间的“TODO: 在这里设置对话控制。
”静态文本控件、“确定”按钮控件,“取消”按钮。
4 添加三个按钮,一个是“添加按钮,ID为IDC_BUTTON1,一个是“删除”按钮,ID为IDC_BUTTON2,一个是“清空”按钮,ID为IDC_BUTTON3。
5为对话框添加如表所示的一些控件。
6打开ClassWizard的Member V ariables页面,选中所需的控件ID号,双击鼠标或单击Add V ariables按钮。
依次为控件增加成员变量。
表9.2控件变量
7用MFC ClassWizard为按钮添加BN_CLICKED消息映射,并增加下列代码:void CKechengDlg::OnButton1()
{
UpdateData();
if (m_list.FindString(-1,m_score)==LB_ERR)
m_list.AddString(m_score);
else
MessageBox("该课程已选");
}
void CKechengDlg::OnButton2()
{
m_list.DeleteString(m_list.GetCurSel());
}
void CKechengDlg::OnButton3()
{
m_list.ResetContent();
}
8 编译运行并测试。
六、实验运行结果
写出程序的运行结果。
实验九:常用控件(4)
一、实验目的与要求
(1)创建一个默认的对话框应用程序Ex_Ctrls,如图7.1所示。
(2)设计一个如图7.2所示的“课程信息”对话框。
图7.1 Ex_Ctrls对话框图7.2 “课程信息”对话框
(3)实现功能:单击图7.1中的“课程信息”按钮,弹出“学生基本信息”对话框,单击“添加”按钮,对话框内容显示在图7.1中的列表框中。
二、实验类型
验证型
三、实验原理及说明
掌握静态控件、按钮、编辑框、列表框和组合框控件的使用方法。
四、实验仪器
五、实验内容和步骤
1.启动Visual C++ 6.0
打开计算机,启动Visual C++ 6.0系统。
2.创建一个默认的对话框应用程序Ex_Ctrls
①选择“文件”→“新建”菜单,在弹出的“新建”对话框中选择“工程”页面,选择MFC AppWizard(exe),在工程框中输入Ex_Ctrls,并将工程文件夹定位到“…\Visual C++程序\实验\实验6”。
②单击“确定”按钮,在出现的Step 1对话框中选择“基本对话(框)”应用程序类型,单击“完成”按钮。
③在对话框编辑器中,单击对话框工具栏上的切换网格按钮,显示对话框网格,将对话框标题改为“使用控件”。
④调整对话框的大小,删除对话框中间的“TODO: 在这里设置对话控制。
”静态文本控件和“确定”按钮控件,将“取消”按钮标题改为“退出”,并移至对话框的下方。
⑤向对话框中添加组框(Group)控件,标题设为“添加”,然后调整其大小和位置。
⑥添加一个按钮,标题设为“课程信息”,ID设为IDC_BUTTON_COURSE。
⑦添加一个列表框,取其默认ID号,去掉Sort风格属性。
3.添加并设计“课程信息”对话框
①按Ctrl+R快捷键,弹出“插入资源”对话框,在资源类型列表中选择Dialog,单击“新建”按钮。
②将该对话框资源的ID设为IDD_COURSE,标题设为“课程信息”,字体设为“宋体,9号”。
③将OK和Cancel按钮的标题改为“添加”和“取消”。
④打开对话框网格,参看图7.2的控件布局,为对话框添加如表7.1所示的一些控件。
表7.1课程信息对话框添加的控件
⑤右击添加的课程类型的组合框控件,从弹出的快捷菜单中选择“属性”命令,将其属性对话框切换到Data页面,直接输入内容,输入一行后按Ctrl+Return键添加另一行。
结果如图7.3所示。
图7.3 课程类型组合框内容输入
⑥按Ctrl+W快捷键或双击对话框资源模板的空白处,为IDD_COURSE创建一个对话框CCourseDlg。
⑦打开ClassWizard的Member V ariables页面,看Class name是否是CCourseDlg,选中所需的控件ID号,双击鼠标。
依次为表7.2控件增加成员变量。
表7.2控件变量
4.添加CCourseDlg类代码
①用MFC ClassWizard为CCourseDlg类添加WM_INITDIALOG消息映射,并添加下列初始化代码:
BOOL CCourseDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_spinOpen.SetRange( 1, 8 );
m_nHours = 60;
m_fCredit = 2.0;
m_nOpen = 1;
m_strType = "专修";
// 这里对专业组合框进行初如化
m_comboSpecial.AddString( "机械工程及其自动化" );
m_comboSpecial.AddString( "电气工程及其自动化" );
m_strSpecial = "机械工程及其自动化";
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
②用MFC ClassWizard为按钮IDOK添加BN_CLICKED的消息映射,并增加下列代码:
void CCourseDlg::OnOK()
{
UpdateData();
m_strNO.TrimLeft();
if (m_strNO.IsEmpty()) {
MessageBox("课程号不能为空!"); return;
}
m_strName.TrimLeft();
if (m_strName.IsEmpty()) {
MessageBox("课程名称不能为空!"); return;
}
CDialog::OnOK();
}
5.添加CEx_CtrlsDlg程序代码
①按Ctrl+W快捷键,打开MFC ClassWizard对话框,为列表框控件IDC_LIST1添加控件变量m_List,类型为CListBox。
②用MFC ClassWizard为按钮IDC_BUTTON_COURSE添加BN_CLICKED消息映射,并添加下列代码:
void CEx_CtrlsDlg::OnButtonCourse()
{
CCourseDlg dlg;
if (IDOK != dlg.DoModal()) return;
// 清除列表框原来的显示内容
while(m_List.GetCount()!=0) m_List.DeleteString(0);
m_List.AddString( "课程号:"+dlg.m_strNO);
m_List.AddString( "课程名称:"+dlg.m_strName);
m_List.AddString( "所属专业:"+dlg.m_strSpecial);
m_List.AddString( "课程类型:"+dlg.m_strType);
CString str;
str.Format("开课学期:%d", dlg.m_nOpen );
m_List.AddString( str );
str.Format("课时数:%d", dlg.m_nHours );
m_List.AddString( str );
str.Format("学分:%4.1f", dlg.m_fCredit);
m_List.AddString( str );
}
③在Ex_CtrlsDlg.cpp文件的前面添加CInputDlg的头文件包含:
#include "Ex_CtrlsDlg.h"
#include "CourseDlg.h"
④编译运行并测试。
六、实验运行结果
写出程序的运行结果。
实验十:菜单、工具栏和状态栏
一、实验目的与要求
(1)创建一个单文档应用程序Ex_SDI。
在“查看”菜单下添加一个子菜单“鼠标位置”,ID为ID_VIEW_MOUSE,当选择该菜单命令后,鼠标当前的位置显示到状态栏上,同时该菜单项呈选中状态。
再次选择该菜单命令,状态栏不再显示当前鼠标位置,
同时该菜单项的选中状态被去除。
(2)在工具栏上添加并设计一个工具按钮图标,使该按钮和ID_VIEW_MOUSE菜单命令联动,并添加一个快捷键Ctrl+M和该菜单命令联动。
(3)在窗口客户区中右击鼠标,弹出快捷菜单,显示主菜单“查看”中的菜单命令。
结果如图10.1所示。
图10.1 Ex_SDI运行结果
二、实验类型
验证型
三、实验原理及说明
掌握菜单、工具栏、状态栏的创建方法。
四、实验仪器
五、实验内容和步骤
1.启动Visual C++ 6.0
打开计算机,启动Visual C++ 6.0系统。
2.用MFC AppWizard(exe)创建一个默认的单文档应用程序Ex_SDI
①选择“文件”→“新建”菜单,在弹出的“新建”对话框中选择“工程”标签,在应用程序项目类型列表框中选择MFC AppWizard(exe)的项目类型,将工程文件夹定位到“…\Visual C++程序\实验\实验10,并在工程框中输入项目名Ex_SDI。
②单击“确定”按钮,从出现的对话框中,选择单个文档(Single Document,SDI)应用程序类型。
③保留其他的默认选项,单击“完成”按钮出现一个对话框,显示出用户在步骤中作出的选择,单击“确定”按钮,系统开始创建。
3.添加菜单
①在项目工作区窗口中选择ResourceView页面,双击资源Menu项中的IDR_ MAINFRAME,则菜单编辑器窗口出现在主界面的右边,相应的Ex_SDI项目的菜单资源被显示出来。
②单击“查看”菜单,则在该菜单的最后一项,V isual C++为用户留出了一个空位置,用来输入新的菜单项。
③在菜单的空位置上双击鼠标左键,则出现它的属性对话框,如图10.2所示,在标题框中输入“鼠标位置(&M)\tCtrl+1”,在ID框输入该菜单项的资源标识:ID_VIEW_MOUSE,在提示框中输入“在状态栏上显示当前鼠标位置\n鼠标位置”,其中\n前一部分的文本是显示在状态栏上的,后一部分是联动的工具图标按钮的提示文本。
图10.2 菜单项属性设置
4.添加并设计一个工具图标按钮
①在项目工作区窗口的ResourceView页面中,双击Toolbar中的IDR_MAINFRAME,打开工具栏资源。
②单击工具栏最右端的空白按钮,在资源编辑器的
按钮设计窗口中绘制一个“箭头”,颜色为黑色,然后将
其拖动到“帮助”按钮的前面,并使该按钮的前后均有
半个空格,结果如图10.3所示。
③双击刚才设计的工具按钮,在弹出的属性对话框
图10.3 设计的工具按钮
中将其ID设为ID_VIEW_MOUSE。
5.菜单命令和工具按钮的更新
①为CMainFrame类添加一个BOOL型的成员变量m_bIsMouse,在CMainFrame类构造函数中将m_bIsMouse的初值设为FALSE。
②用MFC ClassWizard在CMainFrame类中添加工具按钮ID_VIEW_MOUSE的COMMAND和UPDA TE_COMMAND_UI消息映射函数,并添加下列代码:void CMainFrame::OnV iewMouse()
{
m_bIsMouse = !m_bIsMouse;
}
void CMainFrame::OnUpdateV iewMouse(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_bIsMouse);
}
③编译运行并测试。
6.设置快捷键
①在项目工作区窗口的ResourceV iew页面中,双击Accelerator中的IDR_ MAINFRAME,打开快捷键资源。
②双击加速键列表的最下端的空行,弹出如图10.4所示的Accel Properities对话框,选择菜单项ID_VIEW_MOUSE作为要联动的快捷键的ID号,然后单击“下一键”按钮,并按下Ctrl+1作为此加速键的键值。
图10.4 设置快捷键
③编译运行并测试。
7.添加状态栏窗格并显示鼠标当前位置
①打开MainFrm.cpp文件,将原先的indicators数组修改如下:
static UINT indicators[] =
{
ID_SEPARA TOR, // status line indicator
ID_SEPARA TOR,
ID_INDICA TOR_CAPS,
ID_INDICA TOR_NUM,
ID_INDICA TOR_SCRL,
};
②用MFC ClassWizard在CEx_SDIView类中映射WM_MOUSEMOVE(移动鼠标)消息,并在映射函数中添加下列代码:
void CEx_SDIV iew::OnMouseMove(UINT nFlags, CPoint point)
{
CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd; // 获得主窗口指针
CStatusBar* pStatus=&pFrame->m_wndStatusBar; // 获得主窗口中的状态栏指针
CString str;
if (pFrame->m_bIsMouse)
str.Format("%d,%d",point.x, point.y); // 格式化文本
else
str.Empty(); // 为空字符
if (pStatus)
pStatus->SetPaneText(1,str); // 更新第二个窗格的文本
CV iew::OnMouseMove(nFlags, point);
}。