中南大学数学院面向对象报告菜单操作

上传人:平*** 文档编号:11976289 上传时间:2017-10-16 格式:DOC 页数:23 大小:621.58KB
返回 下载 相关 举报
中南大学数学院面向对象报告菜单操作_第1页
第1页 / 共23页
中南大学数学院面向对象报告菜单操作_第2页
第2页 / 共23页
中南大学数学院面向对象报告菜单操作_第3页
第3页 / 共23页
中南大学数学院面向对象报告菜单操作_第4页
第4页 / 共23页
中南大学数学院面向对象报告菜单操作_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《中南大学数学院面向对象报告菜单操作》由会员分享,可在线阅读,更多相关《中南大学数学院面向对象报告菜单操作(23页珍藏版)》请在金锄头文库上搜索。

1、中南大学面向对象程序设计上机报告题目: 菜单操作学生姓名:学号:专业班级:指导老师:数学科学与计算技术学院2011 年 11 月一、 上机目的、内容:学习菜单的工作原理,菜单命令消息在 MFC 框架程序的几个类中的传递顺序和处理过程。明白标记菜单、缺省菜单的实现原理、图形菜单的实现及常犯错误的分析,快捷弹出菜单的实现方式。最后利用 VS2008 通过静态和动态两种方式对菜单进行简单操作(包括产生新的菜单项、新产生的菜单命令安排处理函数等等) 。二、 上机程序设计具体内容:菜单操作静态菜单的创建与操作1.1 利用查找 ID 号或索引对子菜单进行标志,程序运行结果:1.2 利用查找 ID 号或索引

2、对子菜单进行黑体化,程序运行结果:1.3 利用查找 ID 号或索引在子菜单中创建图形标志,程序运行结果:但我们遇到如何设置图标大小的问题,最后通过调用 GetSystemMetrics 函数查看所需图形标志的大小,结果如下图:然后重新设置,得到最后程序,程序运行结果:1.4 利用添加工程组件,实现右键弹出菜单功能,但是 VS2008 里面没有该功能,所以我们选择手动添加鼠标右键弹出菜单的工程组件,程序运行结果:动态菜单的创建、删除与插入操作1.5 利用动态手动添加在菜单栏上添加一个 Lim 菜单项,程序运行结果:1.6 利用动态手动添加在菜单栏 Lim 上添加子菜单项,程序运行结果:并实现子菜

3、单项 a 弹出对话框的功能,程序运行结果:1.7 最后我们利用 VIEW 类中 onchar 函数对消息捕获,再由 ID 号调用菜单项,并运用二维数组 CString 对我们输入的信息进行保存和调用。实现在应用程序窗口的菜单栏处创建动态电话本菜单项的功能(其中主要是实现在窗口处添加姓名和电话号码,最后保存于电话本,然后点击电话本,可以显示所需内容) ,程序运行结果:三、 上机程序设计心得:我们通过学习面向对象程序设计,发现在 VS2008 中添加 MFC 中消息处理函数和 VC6.0 是不一样的。我们只能通过类视图,右键需要添加处理函数的类,选择属性,在属性窗口中,单击“消息”按钮,然后在消息

4、列表框中,选择需要添加的消息。而在运用 MessageBox 时,我们需要用到一种中间类型 TEXT 对字符进行转换。这些都是我们所遇到的问题,但我们都可以通过查询 MSDN 进行解决。四、附录:(2)源程序主要代码第一个程序:/ MainFrm.cpp : CMainFrame 类的实现#include stdafx.h#include Menu.h#include MainFrm.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ CMainFrameIMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)BEGIN_MESSA

5、GE_MAP(CMainFrame, CFrameWnd)ON_WM_CREATE()/ ON_COMMAND(IDM_TEST, &CMainFrame:OnTest)/ON_COMMAND(IDM_TEST, &CMainFrame:OnTest)ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, &CMainFrame:OnUpdateEditCut)ON_UPDATE_COMMAND_UI(ID_FILE_NEW, &CMainFrame:OnUpdateFileNew)ON_COMMAND(IDM_SHOW, &CMainFrame:OnShow)END_MESSAG

6、E_MAP()static UINT indicators =ID_SEPARATOR, / 状态行指示器ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;/ CMainFrame 构造/析构CMainFrame:CMainFrame()/ TODO: 在此添加成员初始化代码/m_bAutoMenuEnable=FALSE;CMainFrame:CMainFrame()int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CFrameWnd:OnCreate(lpCreate

7、Struct) = -1)return -1;if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)TRACE0(未能创建工具栏n);return -1; / 未能创建if (!m_wndStatusBar.Create(this) |!m_wndStatusBar.SetIndic

8、ators(indicators,sizeof(indicators)/sizeof(UINT)TRACE0(未能创建状态栏n);return -1; / 未能创建/ TODO: 如果不需要可停靠工具栏,则删除这三行m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);/GetMenu()-GetSubMenu(0)-CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED); /两种方法进行子菜单项标志/GetMe

9、nu()-GetSubMenu(0)-CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND | MF_CHECKED);/GetMenu()-GetSubMenu(0)-SetDefaultItem(1,TRUE); /两种方法进行子菜单项粗体化/GetMenu()-GetSubMenu(0)-SetDefaultItem(ID_FILE_OPEN);/GetMenu()-GetSubMenu(0)-SetDefaultItem(5,TRUE);/*CString str; /CString 对象str.Format(TEXT(x=%d,y=%d),GetSystemM

10、etrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK);/Format函数格式化MessageBox(str);m_bitmap.LoadBitmap(IDB_BITMAP1);GetMenu()-GetSubMenu(0)-SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);*/GetMenu()-GetSubMenu(0)-EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);SetMenu(NULL); /去掉菜

11、单栏CMenu menu;menu.LoadMenu(IDR_MAINFRAME);SetMenu(&menu);menu.Detach(); /重构菜单栏return 0;BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)if( !CFrameWnd:PreCreateWindow(cs) )return FALSE;/ TODO: 在此处通过修改/ CREATESTRUCT cs 来修改窗口类或样式return TRUE;/ CMainFrame 诊断#ifdef _DEBUGvoid CMainFrame:AssertValid() con

12、stCFrameWnd:AssertValid();void CMainFrame:Dump(CDumpContext& dc) constCFrameWnd:Dump(dc);#endif /_DEBUG/ CMainFrame 消息处理程序/void CMainFrame:OnTest()/ / TODO: 在此添加命令处理程序代码/void CMainFrame:OnUpdateEditCut(CCmdUI *pCmdUI)/ TODO: 在此添加命令更新用户界面处理程序代码if(2=pCmdUI-m_nIndex)/if(ID_EDIT_CUT=pCmdUI-m_nID)pCmdUI-

13、Enable();/两种方法,索引时只能实现菜单栏,不能实现工具栏void CMainFrame:OnUpdateFileNew(CCmdUI *pCmdUI)/ TODO: 在此添加命令更新用户界面处理程序代码/ if(ID_FILE_NEW=pCmdUI-m_nID)/ pCmdUI-Enable(false);if(0=pCmdUI-m_nIndex)pCmdUI-Enable(FALSE); / 两种方法,一个是ID,另一个是索引void CMainFrame:OnShow()/ TODO: 在此添加命令处理程序代码MessageBox(TEXT(MainFrame Show);/ M

14、enu.cpp : 定义应用程序的类行为。#include stdafx.h#include Menu.h#include MainFrm.h#include MenuDoc.h#include MenuView.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ CMenuAppBEGIN_MESSAGE_MAP(CMenuApp, CWinApp)ON_COMMAND(ID_APP_ABOUT, &CMenuApp:OnAppAbout)/ 基于文件的标准文档命令ON_COMMAND(ID_FILE_NEW, &CWinApp:OnFileNew)ON_C

15、OMMAND(ID_FILE_OPEN, &CWinApp:OnFileOpen)/ 标准打印设置命令ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinApp:OnFilePrintSetup)END_MESSAGE_MAP()/ CMenuApp 构造CMenuApp:CMenuApp()/ TODO: 在此处添加构造代码,/ 将所有重要的初始化放置在InitInstance 中/ 唯一的一个CMenuApp 对象CMenuApp theApp;/ CMenuApp 初始化BOOL CMenuApp:InitInstance()/ 如果一个运行在Windows XP 上的应用程序清单指定要/ 使用ComCtl32.dll 版本6 或更高版本来启用可视化方式,/则需要InitCommonControlsEx()。否则,将无法创建窗口。INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);/ 将它设置为包括所有要在应用程序中使用的/ 公共控件类。InitCtrls.dwICC = ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinA

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号