VC 程序设计-实验指导
实验 4
画图程序设计
实验目的和要求
(1)创建一个基于 CListView 的单文档应用程序 Ex_Student,用于以报表方式来显示学生基本信息。 (2)修改“学生基本信息”对话框,使其能显示学生 BMP 照片文件。如图 4.1 所示。
图 4.1 “学生基本信息”对话框
(3)选择“学生基本信息”→“添加”菜单命令,弹出“学生基本信息”对话框,单击“添加”按钮, 学生基本信息添加到列表视图中,并且图片文件被复制到指定文件夹中。 (4)打印并能预览列表视图中所有的列表项内容。如图 4.2 所示。
图 4.2
打印预览结果
实验准备和说明
(1)具备知识:图形、文本、BMP 位图、打印和打印预览。 (2)创建本次实验工作文件夹“…\Visual C++程序\实验\实验 4” 。
实验内容和步骤
1.启动 Visual C++ 6.0 . 打开
计算机,启动 Visual C++ 6.0
系统。 2.创建一个单
文档应用程序 Ex_Student . ① 用 MFC AppWizard 创建一个单
文档应用
程序 Ex_Student,在向导的第六步将 CEx_StudentView 的
1
VC 程序设计-实验指导
基类由 CView 改为 CListView。 ② 在 CEx_StudentView::PreCreateWindow 函数添加下列代码,用来设置列表视图内嵌
列表控件的风 格:
BOOL CEx_StudentView::PreCreateWindow(CREATESTRUCT&; cs) { cs.style |= LVS_REPORT; // 报表风格 return CListView::PreCreateWindow(cs); }
③ 在 CEx_StudentView::OnInitialUpdate 函数中添加下列代码,用来创建列表标题头:
void CEx_StudentView::OnInitialUpdate() { CListView::OnInitialUpdate(); CListCtrl&; m_ListCtrl = GetListCtrl(); CString strHeader[]={"","", "性别", "出生年月", "所学专业"}; int nLong[] = {80, 80, 60, 100, 180}; for (int nCol=0; nCol
④ 编译运行。 3.添加并修改“学生基本信息”对话框及其代码 . ①右击对话框,选中属性,创建“学生基本信息”对话框(ID 为 IDD_INPUT) ,在空白处双击鼠标, 为其添加类 CStuInfoDlg。
“学生基本信息”对话框 如 上 图 设 计 该 对 话 框 , 调 整 好 各 控 件 的 位 置 。 左 边 控 件 的 ID 分 别 为 : IDC_EDIT_NAME, IDC_EDIT_NO, IDC_SEX(第一个 Radio 控件,同时它的“组”属性要选定;第二个 Radio 不管), IDC_BIRTHDAY, IDC_MAJOR。 “出生年月”的控件是选择日期时间选取器。 为控件关联成员变量:
2
VC 程序设计-实验指导
控件 ID IDC_EDIT_NAME IDC_EDIT_NO IDC_SEX IDC_BIRTHDAY IDC_MAJOR
变量类型 CString CString int CTime CString
变量名字 m_strName m_strNo m_bMale m_tBirth m_strSpecial
② 添加两个控件:一个是静态文本控件,ID设为IDC_DRAW,选中“下沉”风格;另一个是按钮控件,标题为“插 入照片
” ,ID为ID_BUTTON_PHOTO。
③为 CStuInfoDlg 类添加下列成员变量:
public: BOOL HBITMAP CString m_bPhotoChange; m_hBitmap; m_strPhotoFilePath; // 照片文件是否重新指定 // 位图句柄 // 照片文件全路径名
④ 在 CStuInfoDlg::OnInitDialog 中添加下列代码: 在 Workspace 的 ClassView 页面,右击 CStuInfoDlg,选中 Add Windows Message Handler…,在新建 Windows 消息/事件(N):选中 WM_INITDIALOG 后按确定即可。
BOOL CStuInfoDlg::OnInitDialog() { CDialog::OnInitDialog(); … if (!m_strPhotoFilePath.IsEmpty()) {
m_hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), m_strPhotoFilePath, IMAGE_BITMAP, 0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); // 将外部BMP文件装载并返回HBITMAP句柄 } m_bPhotoChange = FALSE; return TRUE; // return TRUE unless you set the focus to a control }
⑤用 MFC ClassWizard 为 CStuInfoDlg 类映射 ID_BUTTON_PHOTO 按钮的 BN_CLICKED 消息, 并添 加下列