VS2010与Win7共舞 响应Ribbon控件消息.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VS2010与Win7共舞 响应Ribbon控件消息

上篇我们说到如何利用XML文件定义和描述Ribbon界面,从分工的意义上讲,其实那是UI设计师的活儿。作为程序员,更加专注的是如何对Ribbon控件的消息进行响应,完成相应的业务逻辑。现在,该轮到程序员上场了!在Ribbon界面编辑完成的基础上,我们来看看如何利用Windows Scenic Ribbon API处理各种控件消息,让Ribbon界面真正地投入使用。   在前面一篇文章中,我们讨论了如何利用XML文件创建Ribbon控件,对控件进行排布和设置控件的缩放策略等等,可以说,这些工作都是UI设计师的任务。对程序员来说,更重要的是对控件的消息进行处理实现其业务逻辑。   添加消息处理功能   大家应该还记得,在本系列前面的文章中,我们创建了一个派生自IUIApplication的Ribbon界面宿主对象类CApplication,并利用这个类完成了Ribbon界面的创建,初始化以及与Windows应用程序的集成。要对Ribbon控件的消息进行处理,我们还是要借助这个宿主对象类。为了使得CApplication类具有控件消息处理的能力,我们需要修改它的定义,让它同时也从IUICommandHandler派生。而IUICommandHandler类,则是Scenic Ribbon API提供给我们的控件消息处理类,只要CApplication从这个类派生,就具有了相应的控件消息的处理能力。   为了对控件消息进行处理,我们修改CApplication类的定义如下: // 引入Scenic Ribbon API的头文件 #include uiribbon.h // 引入编译生成的资源头文件 #include ribbonres.h // 调用Windows API获得系统时间 #include windows.h #include stdio.h IUIFramework* g_pFramework = NULL; // Ribbon界面宿主程序 class CApplication ????: public CComObjectRootExCComMultiThreadModel ????????, public IUIApplication??// 处理Ribbon界面的创建和初始化 ????????, public IUICommandHandler // 处理Ribbon控件的消息 然后,我们需要利用COM_INTERFACE_ENTRY宏定义COM_MAP,在CApplication类的定义中,添加: public: ????BEGIN_COM_MAP(CApplication) ??????????COM_INTERFACE_ENTRY(IUIApplication) ??????????????????COM_INTERFACE_ENTRY(IUICommandHandler) ????END_COM_MAP()  这样,Ribbon控件的消息就会发送到CApplication类,由CApplication类进行处理。在整个Scenic Ribbon API中,Ribbon控件消息的处理流程如下图所示。除了之前我们介绍的跟Ribbon界面创建和初始化相关的过程之外,为了完成控件消息,我们首先需要为感兴趣的控件进行注册,这些工作都会在OnCreateCommand函数中完成。完成控件的注册后,当我们需要进行消息处理的控件有消息发生时,IUIFramework就会将这些消息发送给CApplication,而我们就可以在CApplication类中对具体的消息进行处理。Ribbon控件的消息主要分成两种:一种是来自控件的动作消息,比如按钮控件被点击,ComboBox的选择发生了变化等。这类消息都在Execute函数中进行处理;另外一种是则对控件属性进行更新的消息,这类消息在UpdateProperty函数中进行处理。   注册感兴趣的控件   按照Ribbon界面控件消息的处理流程,我们首先需要在OnCreateCommand函数中为我们感兴趣的控件进行注册,这样当控件有动作发生的时候,CApplication类才会收到相应的控件消息,进而可以对其进行处理。在CApplication类的OnCreateCommand函数中,我们完成相应控件的注册: STDMETHOD(OnCreateUICommand)(UINT32 nCmdID, __in UI_COMMANDTYPE typeID, __deref_out IUICommandHandler** ppCommandHandler) ????{ ????????// 对相应控件的消息进行注册 ????????if (nCmdID == cmdMyButton

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档