2.用MFC AppWizard(exe)创建一个默认的单文档应用程序Ex_SDI
① 选择“文件”→“新建”菜单,在弹出的“新建”对话框中选择“工程”标签,在应用程序项目类型列表框中选择MFC AppWizard(exe)的项目类型,将工程文件夹定位到“…\\Visual C++程序\\实验\\实验10,并在工程框中输入项目名Ex_SDI。
② 单击“确定”按钮,从出现的对话框中,选择单个文档(Single Document,SDI)应用程序类型。
③ 保留其他的默认选项,单击“完成”按钮出现一个对话框,显示出用户在步骤中作出的选择,单击“确定”按钮,系统开始创建。
3.添加菜单
① 在项目工作区窗口中选择ResourceView页面,双击资源Menu项中的IDR_ MAINFRAME,则菜单编辑器窗口出现在主界面的右边,相应的Ex_SDI项目的菜单资源被显示出来。
② 单击“查看”菜单,则在该菜单的最后一项,Visual C++为用户留出了一个空位置,用来输入新的菜单项。
③ 在菜单的空位置上双击鼠标左键,则出现它的属性对话框,如图10.2所示,在标题框中输入“鼠标位置(&M)\\tCtrl+1”,在ID框输入该菜单项的资源标识:ID_VIEW_MOUSE,在提示框中输入“在状态栏上显示当前鼠标位置\\n鼠标位置”,其中\\n前一部分的文本是显示在状态栏上的,后一部分是联动的工具图标按钮的提示文本。
图10.2 菜单项属性设置
4.添加并设计一个工具图标按钮
① 在项目工作区窗口的ResourceView页面中,双击Toolbar中的IDR_MAINFRAME,打开工具栏资源。
② 单击工具栏最右端的空白按钮,在资源编辑器的按钮设计窗口中绘制一个“箭头”,颜色为黑色,然后将其拖动到“帮助”按钮的前面,并使该按钮的前后均有半个空格,结果如图10.3所示。
③ 双击刚才设计的工具按钮,在弹出的属性对话框中将其ID设为ID_VIEW_MOUSE。
图10.3 设计的工具按钮
5.菜单命令和工具按钮的更新
① 为CMainFrame类添加一个BOOL型的成员变量m_bIsMouse,在CMainFrame类构造函数中将m_bIsMouse的初值设为FALSE。
② 用MFC ClassWizard在CMainFrame类中添加工具按钮ID_VIEW_MOUSE的COMMAND和UPDATE_COMMAND_UI消息映射函数,并添加下列代码:
void CMainFrame::OnViewMouse()
{ }
m_bIsMouse = !m_bIsMouse;
25
void CMainFrame::OnUpdateViewMouse(CCmdUI* pCmdUI) { }
pCmdUI->SetCheck(m_bIsMouse);
③ 编译运行并测试。 6.设置快捷键
① 在项目工作区窗口的ResourceView页面中,双击Accelerator中的IDR_ MAINFRAME,打开快捷键资源。
② 双击加速键列表的最下端的空行,弹出如图10.4所示的Accel Properities对话框,选择菜单项ID_VIEW_MOUSE作为要联动的快捷键的ID号,然后单击“下一键”按钮,并按下Ctrl+1作为此加速键的键值。
图10.4 设置快捷键
③ 编译运行并测试。
7.添加状态栏窗格并显示鼠标当前位置
① 打开MainFrm.cpp文件,将原先的indicators数组修改如下:
static UINT indicators[] = { };
ID_SEPARATOR, ID_SEPARATOR,
// status line indicator
ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL,
② 用MFC ClassWizard在CEx_SDIView类中映射WM_MOUSEMOVE(移动鼠标)消息,并在映射函数中添加下列代码:
void CEx_SDIView::OnMouseMove(UINT nFlags, CPoint point) { }
CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd; // 获得主窗口指针 CStatusBar* pStatus=&pFrame->m_wndStatusBar; // 获得主窗口中的状态栏指针 CString str;
if (pFrame->m_bIsMouse) str.Format(\ else str.Empty();
// 为空字符
// 更新第二个窗格的文本
// 格式化文本
if (pStatus) pStatus->SetPaneText(1,str); CView::OnMouseMove(nFlags, point);
26
③ 将MainFrm.h文件中的受保护变量m_wndStatusBar变成公共变量。 ④ 在Ex_SDIView.cpp文件的开始处增加下列语句:
#include \iew.h\#include \
⑤ 编译运行并测试。 8.实现快捷菜单
① 用MFC ClassWizard在CMainFrame类添加WM_CONTEXTMENU消息映射,并在映射函数添加下列代码:
void CMainFrame::OnContextMenu(CWnd* pWnd, CPoint point) { }
CMenu* pSysMenu = GetMenu();
// 获得程序菜单指针
pSysMenu->GetSubMenu(2) ->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);
② 编译运行并测试。
六、实验运行结果
写出程序的运行结果。
实验十一:框架窗口和文档
一、实验目的与要求
(1)创建一个多文档(或单文档)应用程序Ex_MDI,用来操作“课程信息”文档或用
来操作“学生基本信息”文档。图11.1是“课程信息”文档添加时的界面。图11.2 学生基本信息添加。(两者任选其一,以下以操作“课程信息”文档为例进行讲解。操作“学生基本信息”文档参见教材)。 (2)创建一个可序列化类CCourseInfo,用于“课程信息”的序列化操作。 (3)建立菜单系统,其基本菜单命令包括“添加”、“打开”和“保存”。选择“添加”菜单命令,弹出相应的信息对话框,添加后信息显示在视图中,并保存在相应的CObArray类对象。选择“保存”菜单命令,将添加的信息保存在指定的文件中。选择“打开”菜单命令,将保存的文件内容读取并显示在视图中。
27
图11.1 课程信息添加 图11.2 学生基本信息添加
二、实验类型
验证型
三、实验原理及说明
掌握文档序列化的方法。
四、实验仪器
序 号 1 名 称 计算机 主要用途 编写程序 五、实验内容和步骤
1.启动Visual C++ 6.0
打开计算机,启动Visual C++ 6.0系统。
2.创建多文档应用程序Ex_MDI
用MFC AppWizard创建一个默认的多文档应用程序Ex_MDI。
3.复制 “课程信息”对话框
① 将Ex_Student项目工作区切换到ResourceView页面,展开Dialog资源的所有项。 ② 单击开发环境标准工具栏上的“打开”按钮
,打开实验8中Ex_Ctrls的资源文件
Ex_Ctrl.rc,展开Dialog资源的所有项,选定IDD_COURSE对话框资源项,按住Ctrl键,将其拖放到Ex_Student项目的Dialog资源处。
4.复制对话框类CCourseDlg
① 单击标准工具栏上的“打开”按钮,在“打开”文件对话框中,定位到Ex_Ctrls项目文件夹,选中CourseDlg.h和CourseDlg.cpp文件,按快捷键Ctrl+C,然后将“打开”文件对话框的文件“查找范围”定位到本项目Ex_MDI的文件夹中,按快捷键Ctrl+V、CourseDlg和CourseDlg类的源代码文件就复制过来了。
② 关闭“打开”文件对话框,选择“工程”→“添加工程”→Files菜单,在弹出的Insert Files Into Project对话框中选中刚才复制的源文件,单击“确定”按钮, CCourseDlg类就添加到Ex_MDI项目中。
③打开CourseDlg.cpp文件,将文件前面的头文件包含进行修改,如下所示:
#include \ #include \
// 修改原来的#include \
5.实现MFC ClassWizard对CCourse类的支持
若此时打开MFC ClassWizard对话框,在Class name组合框中有时是找不到刚添加的CCourse类。为此需要进行下列操作:
① 单击标准工具栏上的“打开”按钮,在“打开”文件对话框中,将文件类型选择为“所有文件(*.*)”,在文件列表框中,右击文件Ex_MDI.clw,从弹出的快捷菜单中选择“删除”命令。这里的Ex_MDI.clw是项目Ex_MDI的类向导文件。
② 关闭“打开”文件对话框后,按快捷键Ctrl+W,出现一个消息对话框,询问是否从资源中重新创建一个类向导文件,单击“是(Y)”按钮,出现如图11.3所示的对话框。
28
图11.3 重新创建类向导文件
③ 单击Add All按钮,再单击OK按钮。
6.添加一个CCourseInfo类并使该类可序列化
① 选择“文件”→“新建”菜单命令,显示出“新建”对话框。单击“文件”标签,在左边的列表框中选择C/C++ Header File项,在右边的“文件”下的编辑框中输入CourseInfo.h,单击“确定”按钮。
② 在文档窗口中输入下面的代码:
class CCourseInfo : public CObject { CString strNO; CString strName; };
CString CString BYTE BYTE
strSpecial; strType; nOpen; nHours;
// 课程号 // 课课名称 // 所属专业 // 课程类型 // 开课学期 // 课时数 // 学分
// 序列化声明
float fCredit; DECLARE_SERIAL(CCourseInfo)
public:
CCourseInfo() {};
CCourseInfo(CString id, CString name, CString special, CString type, BYTE term, BYTE hours, float credit); void Serialize(CArchive &ar); void Display(int y, CDC *pDC); // 在坐标为(0,y)处显示数据
③ 再次选择“文件”→“新建”菜单命令,显示出“新建”对话框。单击“文件”标签,在左边的列表框中选择C++ Source File项,在右边的“文件”下的编辑框中输入
CourseInfo.cpp,单击“确定”按钮。
④ 在文档窗口中输入下面的代码:
#include \#include \
CCourseInfo::CCourseInfo(CString id, CString name, CString special, CString type, BYTE term, BYTE hours, float credit) {
strNO
= id;
strName = name; strSpecial = special;
29
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库计算机科学与技术《Vc 程序设计》实验指导书-07计(6)在线全文阅读。
相关推荐: