更新UI对象

  1. /*
  2.     更新UI对象
  3.     常规情况下,菜单和工具栏按钮可以有多种状态。例如,菜单不可用时可以置灰,菜单
  4.     正在被使用时可以设定为选中状态。同样工具栏也有这些状态。
  5.     谁来更新这些可变状态项的状态?从逻辑上讲,如果一个菜单项产生了一个命令消息,
  6.     此消息会被文档处理,那么由文档去更新可变状态项的状态更有意义,文档中应该包括
  7.     可变状态项的状态信息。
  8.     如果一个命令对应多个UI对象,比如一个菜单项和一个工具栏项,那么这两处的发出的
  9.     命令将会被路由到同一个处理函数。这样就会在一处为多个同等的UI对象封装一份
  10.     UI更新代码。
  11.     编程框架提供了一个自动更新UI对象的快捷方法,你可以选择自己的更新方法,但框架
  12.     提供的方法更有效且易于使用。
  13.     1:更新函数何时被调用?
  14.     假设用户通过鼠标点击了“文件”菜单,此操作会产生WM_INITMENUPOPUP消息,在菜单
  15.     弹出之前,编程框架的更新机制会更新“文件”菜单下的所有菜单项,这样我们就可以
  16.     看到各个菜单项的状态了。
  17.     为了做到这一点,编程框架会以标准的命令路由方式路由弹出菜单的所有菜单项命令。
  18.     在路由的过程中,通过检查消息映射入口,命令目标有机会更新任意的菜单项及调用
  19.     更新函数。比如,一个菜单有六个菜单项,那个弹出之前,这六个更新命令都会被发送
  20.     出去。如果存在与其相关的更新函数,则其会被更新状态。如果没有,编程框架会检查
  21.     与命令ID相关的处理函数是否存在,并依据其更新菜单项的状态。
  22.     如果在命令路由的过程中找不到相应的状态更新项,编程框架会自动去检查针对此命令
  23.     ID的响应函数是否存在,如果存在则UI对象可用,如果不存在则不可用。
  24.     所以,为了使一个UI对象可用,可以为其提供一个命令响应函数或者一个UI对象更新
  25.     函数。二者存在一个即可。
  26.     禁用UI对象的默认不可用属性是可以做到的,具体可以参照CFrameWnd的成员变量
  27.     m_bAutoMenuEnable。
  28.     编程框架中的菜单初始化是自动完成的,它发生在程序接收到消息WM_INITMENUPOPUP
  29.     的时候。在IDLE时间内,编程框架会像查找菜单的更新函数一样为按钮也查找更新函数。
  30.     2:宏ON_UPDATE_COMMAND_UI
  31.     通过属性窗口可以自动地将UI对象的ID与其相应的更新函数联系起来。UI对象的更新
  32.     函数的原型如下:
  33. */
  34. /*
  35.     像所有的消息处理函数一样,更新函数的声明需要关键字afx_msg的支持
  36.     所像所有的更新函数一样,它也需要一个参数,类型为CCmdUI*
  37. */
  38. afx_msg void OnUpdateEditClearAll(CCmdUI *pCmdUI);
  39. /*
  40.     3:类CCmdUI
  41.     在路由更新命令的过程中,编程框架会为更新函数提供一个CCmdUI*类型的参数,它代表
  42.     了产生更新命令的UI对象。更新函数会调用CCmdUI的成员函数去更新其代表的UI对象。
  43.     示例代码如下:
  44. */
  45. void CMyWinApp::OnUpdateEditClearAll(CCmdUI *pCmdUI)
  46. {
  47.     pCmdUI->Enable(m_bClearAllAvailable);
  48. }
  49. /*
  50.     CCmdUI的成员函数可操作的UI对象包括:
  51.     Menu item,菜单项
  52.             Enables or disables
  53.             Checks (×) or unchecks
  54.             Checks using dot (•)
  55.             Sets item text
  56.     Toolbar button,工具栏项
  57.             Enables or disables
  58.             Selects, unselects, or indeterminate
  59.             Same as SetCheck
  60.     Status-bar pane,状态栏项
  61.             Makes text visible or invisible
  62.             Sets pop-out or normal border
  63.             Same as SetCheck
  64.             Sets pane text
  65.     Normal button in CDialogBar
  66.             Enables or disables
  67.             Checks or unchecks check box
  68.             Same as SetCheck
  69.             Sets button text
  70.     Normal control in CDialogBar
  71.             Enables or disables
  72.             Sets window text
  73.     成员函数有下面的五人:
  74.         ContinueRouting
  75.         Enable
  76.         SetCheck
  77.         SetRadio
  78.         SetText
  79. */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值