- 1、本文档共60页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC的菜单与工具栏使用方法解读
菜单 菜单是重要的用户界面对象,用户通常从菜单栏中选择命令来使用应用程序。 Windows98支持三种类型的菜单: (1)菜单栏(主菜单):菜单栏横放在窗口的顶部 (2)弹出式子菜单:弹出式菜单是从主菜单下弹出的菜单 (3)上下文菜单:通过鼠标右键弹出的自由浮动菜单 1.菜单的机制与功能 菜单可以用多种方法创建,一般存在在资源脚本中,在程序运行时才调入,就像其他资源一样。 1.1菜单消息 菜单被选中时发送消息给Windows,再由Windows传送给应用程序的消息映像。 Win32API提供4个菜单消息,但在MFC消息映像中,只有两个菜单消息WM_COMMAND和ON_UPDATE_COMMAND_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消息 在许多情况下菜单项可能有多个状态。例如某一个时刻可用(正常),而某一个时刻不可用(菜单变灰);菜单项可以加注标记,以表明被选中或未被选中。 UPDATE_COMMAND_UI是MFC所特有的,如果想根据应用程序的当前状态激活或者使菜单项无效,或者在程序运行的某一刻反映菜单项的可用性,就要由自己处理这条消息。此消息和Win32 API的WM_INITPOPUPMENU消息相对应。 ON_UPDATE_COMMAND_UI项采用以下形式: ON_UPDATE_COMMAND_UI(MenuID,ClassMethod) MenuID是菜单项的标识符,ClassMethod是处理菜单UPDATE_COMMAND_UI消息定义的方法(更新处理函数) 该消息值适合弹出式菜单项的菜单项,而对于顶层菜单项则不适用。例如不能使用该消息来禁止“文件”菜单项。 如果菜单项有更新处理函数,那么它被调用进行更新;如果没有,那么框架检查命令处理函数是否存在,若不存在,则使菜单变灰。 必须提供一个菜单处理函数或更新函数。 (4)编辑“MenuitemView.cpp”文件中的构造函数,初始化数据成员,加入下面代码:CMenuitemView::CMenuitemView(){ m_rectangle =TRUE; m_ellipse =FALSE; m_crbk=RGB(255,0,0);}(5)利用ClassWizard为视图类加入命令消息控制函数及更新命令UI消息控制函数。 (6)编辑“MenuitemView.cpp”文件里的菜单命令控制函数。 OnGraphRec函数用m_crbk颜色来填充客户区矩形,并设置布尔型变量m_rectangle 、 m_ellipse的值。 Void CMenuitemView::OnGraphRec (){ CClientDC dc(this); CPen newpen, *oldpen;newpen.CreatePen(PS_SOLID,2,RGB(255,255,0));oldpen=dc.SelectObject(newpen); CBrush* pNewBrush, * pOldBrush;pNewBrush=new CBrush;pNewBrush-CreateSolidBrush(m_crbk); pOldBrush=dc.SelectObject(pNewBrush);dc.Rectangle(40,20,200,50);m_rectangle =FALSE;m_ellipse =TRUE;dc.SelectObject(pOldBrush);dc.SelectObject(oldpen);delete pNewBrush;} 对应的更新命令UI控制函数OnUpdateGraphRec根据变量m_rectangle的值来控制菜单的有效性状态,决定菜单项“rectangle ”什么时候有效。 void CMenuitemView::OnUpdateGraphRec(CCmdUI*pCmdUI){ pCmdUI-Enable(m_rectangle);}
文档评论(0)