一、实训目的与要求
1.熟悉菜单编辑器与工具栏编辑器的操作方法。
2.掌握菜单项助记符与热键的使用。
3.掌握通过菜单调用对话框的方法。
4.学习工具按钮与菜单项命令相结合的方法。
二、实训内容
1.设计一个具有单文档界面的简易学生成绩处 理系统,要求:
(1)处理前需要进行用户身份认证,如图 1.14 所示。
(2)通过主界面的菜单或工具栏调用成绩录入
和处理对话框,主界面如图 1.15 所示。 图 1.14 登录界面
图 1.15 主界面 菜单格式与功能如表 1.1 所示。
表 1.1 菜单格式与功能
成绩处理(S) 关于(A)
录入并计算(O) Ctrl+O 系统信息(S)
————
退出(S) Alt+F4 成绩录入和处理界面如图 1.16 所示。
图 1.16 成绩输入与计算界面 系统信息界面如图 1.17 所示。
图 1.17 系统信息界面
三、实验设备及环境 1.每人一台 PC 机器。
2.每台机器上安装 Visual C++开发环境、Office 软件、WinRAR 或 WinZIP。
3.网络畅通。
4.投影仪一台。
四、实训步骤
1.利用 MFC AppWizard(exe)创建一个工程名称为 SY_Dlg 的单文档应用程序,并将标题 改为“简易学生成绩处理系统”,单击“完成”按钮后再单击“确定”按钮即进入开发环境。
2.单击 ResourceView 选项卡→SY_Dlg resources→Menu→IDR_MAINFRAME,打开菜单 编辑器,按实训要求修改现有菜单,并将“录入并计算”菜单的 ID 设为 ID_MENU_IN;“退 出”菜单的 ID 设为 ID_MENU_EXIT。
注意:此时编译新增的菜单是灰色的。
3.单击 ResourceView 选项卡→Accelerator→IDR_MAINFRAME,为新增菜单添加快捷键,
如图 1.18 所示。
图 1.18 “Accel 属性”对话框
4.单击 ResourceView 选项卡→Dialog→IDD_ABOUTBOX,修改系统信息界面。
5.单击 ResourceView 选项卡,右击 Dialog,在弹出的快捷菜单中选择“插入 Dialog”选 项,为程序添加用户身份认证与成绩录入对话框,如图 1.19 所示。
图 1.19 Dialog 的快捷菜单
修改标题,删除其中的“确定”和“取消”按钮,并按实训要求的界面图进行修改。
按 Ctrl+W 组合键打开 MFC ClassWizard 对话框,为登录界面对话框(IDD_DIALOG1)
与成绩处理对话框(IDD_DIALOG2)分别建立新类,类名为 CDlgPw 和 CdlgIn,然后选择 CDlgIn 类并切换到 Member Variables 选项卡,用前面所学知识为控件连接变量并为“计算”和“返回”
按钮编写相应的代码。
void CDlgIn::OnButton1() {
// TODO: Add your control notification handler code here UpdateData(true);
m_pj=(m_sx+m_yw+m_yy)/3.0;
UpdateData(false);
}
void CDlgIn::OnButton2() {
// TODO: Add your control notification handler code here OnOK();
}
为登录界面对话框(IDD_DIALOG1)的编辑框分别连接 CString 类型的变量:m_username 和 m_password。
6.建立对话框与菜单的联系。
按 Ctrl+W 组合键打开 MFC ClassWizard 对话框,选择类名 CMainFrame,选择 Object IDs 为 ID_MENU_IN,添加 COMMAND 消息,代码分别如下:
CDlgIn dlg; //创建对话框对象
dlg.DoModal(); //打开成绩输入窗口,注意要在首部添加#include "DlgIn.h"
选择 Object IDs 为 ID_MENU_EXIT,添加 COMMAND 消息,代码如下:
exit(0);
7.单击 ResourceView 选项卡→Toolbar→IDR_MAINFRAME,为新增菜单项设置工具图 标;然后双击图标,在弹出的属性窗口中选择图标对应的 ID 分别为 ID_MENU_IN 和 ID_MENU_EXIT,提示为:请输入学生成绩\n 输入成绩并计算、结束系统一行,以与菜单同 步,如图 1.20 所示。
图 1.20 工具栏图标编辑窗口
8.单击 ClassView 选项卡→CSY_DlgApp→InitInstance,在此启动主窗体前添加设置启动 界面的程序代码:
CDlgPw dlg; // 注意在程序首部加上#include "DlgPw.h"
BOOL K=TRUE;
while (K) //建立循环,以便当输入错误后重输
if (dlg.DoModal() == IDOK) //用户单击“确定”按钮
if (dlg.m_password!="123" || dlg.m_username!="wyg") //设定用户名为 wyg,密码为 123 AfxMessageBox("输入有误,请重输!",MB_OK|MB_ICONERROR);
else K=false; //输入正确退出循环 else return FALSE; //用户单击“退出”按钮 9.编译、连接并运行。
五、注意事项
1.删除现有菜单,只需在菜单编辑器中右击该菜单,在弹出的快捷菜单中选择“剪切”
选项;而删除工具栏中的按钮是将该按钮拖离工具栏,而不能按 Del 键。
2.将编辑框属性对话框“样式”选项卡中的“密码”选中,则输入时用“*”号代替输 入内容,可避免密码泄露。
六、拓展与思考
1.菜单有哪些常用的规则?如何为菜单项设计助记符与快捷键?
2.如何使一个工具按钮与菜单项命令相结合?