欢迎来到天天文库
浏览记录
ID:58878962
大小:169.50 KB
页数:60页
时间:2020-09-30
《VC++的菜单与工具栏使用方法总结ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、菜单菜单是重要的用户界面对象,用户通常从菜单栏中选择命令来使用应用程序。Windows98支持三种类型的菜单:(1)菜单栏(主菜单):菜单栏横放在窗口的顶部(2)弹出式子菜单:弹出式菜单是从主菜单下弹出的菜单(3)上下文菜单:通过鼠标右键弹出的自由浮动菜单1.菜单的机制与功能菜单可以用多种方法创建,一般存在在资源脚本中,在程序运行时才调入,就像其他资源一样。1.1菜单消息菜单被选中时发送消息给Windows,再由Windows传送给应用程序的消息映像。Win32API提供4个菜单消息,但在MFC消息映像中,只有两个菜单消息WM_COMMAND和ON_UPDATE_COMMAN
2、D_UI。MFC自动处理其他两个消息。(1)处理WM_COMMAND消息用户选中了菜单项会产生WM_COMMAND消息MFC的框架窗口类要确保每一个菜单项都有WM_COMMAND消息的处理函数,对缺少处理函数的菜单项,MFC使其变灰。消息映射ON_COMMAND项采用以下形式:ON_COMMAND(MenuID,ClassMethod)MenuID是菜单项的标识符,ClassMethod是处理菜单项WM_COMMAND消息定义的方法(命令处理函数)。(2)处理UPDATE_COMMAND_UI消息在许多情况下菜单项可能有多个状态。例如某一个时刻可用(正常),而某一个
3、时刻不可用(菜单变灰);菜单项可以加注标记,以表明被选中或未被选中。UPDATE_COMMAND_UI是MFC所特有的,如果想根据应用程序的当前状态激活或者使菜单项无效,或者在程序运行的某一刻反映菜单项的可用性,就要由自己处理这条消息。此消息和Win32API的WM_INITPOPUPMENU消息相对应。ON_UPDATE_COMMAND_UI项采用以下形式:ON_UPDATE_COMMAND_UI(MenuID,ClassMethod)MenuID是菜单项的标识符,ClassMethod是处理菜单UPDATE_COMMAND_UI消息定义的方法(更新处理函数)该消息
4、值适合弹出式菜单项的菜单项,而对于顶层菜单项则不适用。例如不能使用该消息来禁止“文件”菜单项。如果菜单项有更新处理函数,那么它被调用进行更新;如果没有,那么框架检查命令处理函数是否存在,若不存在,则使菜单变灰。必须提供一个菜单处理函数或更新函数。1.2基于菜单栏的程序设计1Menuitem程序为一个单文档的应用程序,程序启动后,单击“graph”菜单中的“rectangle”,则在当前的客户区中显示一个矩形;单击“graph”菜单中的“Ellipse”,则在当前的客户区中显示一个椭圆。(1)利用AppWizard,生成一个MFC的单文档工程“Menuitem”。(2)单
5、击“Workspace”窗口的“ResourceView”标签,找到“Menu”项,双击“ID_MAINFRAME”,对菜单资源进行编辑。用右键单击菜单项最右边的虚线框,在弹出式菜单中选择“Propertis”命令,在“MenuItemProperties”窗体中在“Caption”一栏中输入“graph”用同样方法,设计其下的两个菜单项:第一个子菜单项,“ID”为“ID_GRAPH_REC”,“Caption”为“Rectangle”。第二个子菜单项,“ID”为“ID_GRAPH_ELLIPSE”,“Caption”为“Ellipse”。(3)在“CMenuitem
6、View”类中加入一些数据成员:public:boolm_rectangle;boolm_ellipse;COLORREFm_crbk;(4)编辑“MenuitemView.cpp”文件中的构造函数,初始化数据成员,加入下面代码:CMenuitemView::CMenuitemView(){m_rectangle=TRUE;m_ellipse=FALSE;m_crbk=RGB(255,0,0);}(5)利用ClassWizard为视图类加入命令消息控制函数及更新命令UI消息控制函数。(6)编辑“MenuitemView.cpp”文件里的菜单命令控制函数
7、。OnGraphRec函数用m_crbk颜色来填充客户区矩形,并设置布尔型变量m_rectangle、m_ellipse的值。VoidCMenuitemView::OnGraphRec(){CClientDCdc(this);CPennewpen,*oldpen;newpen.CreatePen(PS_SOLID,2,RGB(255,255,0));oldpen=dc.SelectObject(&newpen);CBrush*pNewBrush,*pOldBrush;pNewBrush=n
此文档下载收益归作者所有