《Windows 编程》实验报告
学号:
姓名:
实验一 常用控件(1)
1、 实验目的和要求
(1)创建一个默认的对话框应用程序 Ex_Ctrls,如图 1.1 所示。
(2)设计一个如图 1.2 所示的“课程信息”对话框。
图 1.1
Ex_Ctrls 对话框 图 1.2 “课程信息”对话框
(3)实现功能:单击图 1.1 中的“课程信息”按钮,弹出“学生基本信息”对
话框,单击“添加”按钮,对话框内容显示在图 1.1 中的列表框中。
2、 实验准备和说明
(1)具备知识:静态控件、按钮、编辑框、旋转按钮控件、列表框和组合框控
件。
(2)创建本次实验工作文件夹“…\Visual C++程序\实验\实验 1”。
3、 实验内容和步骤
1.启动 Visual C++ 6.0
打开计算机,启动 Visual C++ 6.0 系统。
2.创建一个默认的对话框应用程序 Ex_Ctrls
① 选择“文件”→“新建”菜单,在弹出的“新建”对话框中选择“工程”页
面,选择 MFC AppWizard(exe),在工程框中输入 Ex_Ctrls,并将工程文件夹
定位到“…\Visual C++程序\实验\实验 2”。
② 单击“确定”按钮,在出现的 Step 1 对话框中选择“基本对话(框)”应用
程序类型,单击“完成”按钮。
③ 在对话框编辑器中,单击对话框工具栏上的切换网格按钮 ,显示对话框网
第 1 页 共 49 页
格,将对话框标题改为“使用控件”。
④ 调整对话框的大小,删除对话框中间的“TODO: 在这里设置对话控制。”静
态文本控件和“确定”按钮控件,将“取消”按钮标题改为“退出”,并移至对
话框的下方。
⑤ 向对话框中添加组框(Group)控件,标题设为“添加”,然后调整其大小和
位置。
⑥ 添加一个按钮,标题设为“课程信息”,ID 设为 IDC_BUTTON_COURSE。
⑦ 添加一个列表框,取其默认 ID 号,去掉 Sort 风格属性。
3.添加并设计“课程信息”对话框
① 按 Ctrl+R 快捷键,弹出“插入资源”对话框,在资源类型列表中选择 Dialog,
单击“新建”按钮。
② 将该对话框资源的 ID 设为 IDD_COURSE,标题设为“课程信息”,字体设为
“宋体,9 号”。
③ 将 OK 和 Cancel 按钮的标题改为“添加”和“取消”。
④ 打开对话框网格,参看图 1.2 的控件布局,为对话框添加如表 1.1 所示的一
些控件。
表 1.1 课程信息对话框添加的控件
添加的控件
ID 号
标
题
其 他 属 性
编辑框(课程号)
IDC_EDIT_COURSENO —— 默认
编 辑 框 ( 课 程 名
IDC_EDIT_COURSENAM
称)
E
—— 默认
组 合 框 ( 所 属 专
业)
组 合 框 ( 课 程 类
型)
编 辑 框 ( 开 课 学
期)
IDC_COMBO_SPECIAL —— 默认
IDC_COMBO_TYPE
—— 默认
IDC_EDIT_OPEN
—— 默认
旋转按钮
IDC_SPIN1
—— Auto buddy、Set buddy
第 2 页 共 49 页
integer、 Right 对齐,
其余默认
编辑框(课时数)
IDC_EDIT_COURSEHOU
RS
—— 默认
编辑框(学分)
IDC_EDIT_CREDIT
—— 默认
⑤ 右击添加的课程类型的组合框控件,从弹出的快捷菜单中选择“属性”命令,
将其属性对话框切换到 Data 页面,直接输入内容,输入一行后按 Ctrl+Return
键添加另一行。结果如图 1.3 所示。
图 1.3 课程类型组合框内容输入
⑥ 按 Ctrl+W 快捷键或双击对话框资源模板的空白处,为 IDD_COURSE 创建一个
对话框 CCourseDlg。
⑦ 打 开 ClassWizard 的 Member Variables 页 面 , 看 Class name 是 否 是
CCourseDlg,选中所需的控件 ID 号,双击鼠标。依次为表 1.2 控件增加成员变
量。
表 1.2 控件变量
控件 ID 号
变 量 类
别
变量类型
变量名
范 围 和 大
小
IDC_EDIT_COURSENO
Value
CString
m_strNO
IDC_EDIT_COURSENAM
E
Value
CString
m_strName
IDC_COMBO_SPECIAL
Value
CString
IDC_COMBO_SPECIAL
Control CComboBox
m_strSpecia
l
m_comboSpec
ial
——
IDC_COMBO_TYPE
Value
CString
m_strType
第 3 页 共 49 页
IDC_EDIT_OPEN
Value
BYTE
m_nOpen
IDC_SPIN1
Control
CSpinButtonC
trl
m_spinOpen ——
IDC_EDIT_COURSEHOU
RS
Value
int
m_nHours
IDC_EDIT_CREDIT
Value
float
m_fCredit
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();
第 4 页 共 49 页
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 );
第 5 页 共 49 页
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"
④ 编译运行并测试。
6.写出实验报告
4、 实验结果
5、 结论和心得
6、 实验代码
// CourseDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Ex_Ctrls.h"
#include "CourseDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
第 6 页 共 49 页
///////////////////////////////////////////////////////////////////////////
// CCourseDlg dialog
CCourseDlg::CCourseDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCourseDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCourseDlg)
m_strNO = _T("");
m_strName = _T("");
m_nHours = 0;
m_fCredit = 0.0f;
m_nOpen = 0;
m_strType = _T("");
m_strSpecial = _T("");
//}}AFX_DATA_INIT
}
void CCourseDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCourseDlg)
DDX_Control(pDX, IDC_COMBO_SPECIAL, m_comboSpecial);
DDX_Control(pDX, IDC_SPIN1, m_spinOpen);
DDX_Text(pDX, IDC_EDIT_COURSENO, m_strNO);
DDX_Text(pDX, IDC_EDIT_COURSENAME, m_strName);
DDX_Text(pDX, IDC_EDIT_COURSEHOURS, m_nHours);
DDX_Text(pDX, IDC_EDIT_CREDIT, m_fCredit);
DDX_Text(pDX, IDC_EDIT_OPEN, m_nOpen);
DDX_CBString(pDX, IDC_COMBO_TYPE, m_strType);
DDX_CBString(pDX, IDC_COMBO_SPECIAL, m_strSpecial);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCourseDlg, CDialog)
//{{AFX_MSG_MAP(CCourseDlg)
//}}AFX_MSG_MAP
ON_WM_INITMENU()
END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////
// CCourseDlg message handlers
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);
第 7 页 共 49 页