vs2010与win7共舞响应ribbon控件消息

vs2010与win7共舞响应ribbon控件消息

ID:32754695

大小:116.46 KB

页数:6页

时间:2019-02-15

vs2010与win7共舞响应ribbon控件消息_第1页
vs2010与win7共舞响应ribbon控件消息_第2页
vs2010与win7共舞响应ribbon控件消息_第3页
vs2010与win7共舞响应ribbon控件消息_第4页
vs2010与win7共舞响应ribbon控件消息_第5页
资源描述:

《vs2010与win7共舞响应ribbon控件消息》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、上篇我们说到如何利用XML文件定义和描述Ribbon界面,从分工的意义上讲,其实那是UI设计师的活儿。作为程序员,更加专注的是如何对Ribbon控件的消息进行响应,完成相应的业务逻辑。现在,该轮到程序员上场了!在Ribbon界面编辑完成的基础上,我们来看看如何利用WindowsScenicRibbonAPT处理各种控件消息,让Ribbon界而真正地投入使用。在前而一篇文章中,我们讨论了如何利用XML文件创建Ribbon控件,对控件进行排布和设置控件的缩放策略等等,可以说,这些工作都是U1设计师的任务。对程序员来说,更

2、重要的是对控件的消息进行处理实现其业务逻辑。添加消息处理功能大家应该还记得,在本系列前面的文章屮,我们创建了一个派生自lUlApplication的Ribbon界面宿主对象类CApplication,并利用这个类完成了Ribbon界面的创建,初始化以及与Windows应用程序的集成。要对Ribbon控件的消息进行处理,我们还是要借助这个宿主对象类。为了使得CApplication类具有控件消息处理的能力,我们需要修改它的定义,让它同吋也从IUICommandlland1er派生。而IUICommandlland1er

3、类,则是ScenicRibbonAPI提供给我们的控件消息处理类,只要CApplication从这个类派生,就具有了相应的控件消息的处理能力。为了对控件消息进行处理,我们修改CApplication类的定义如下://引入ScenicRibbonAPI的头文件#include//引入编译生成的资源头文件#include"ribbonres.h"//调用WindowsAPI获得系统吋间#includeMwindows.hn#includeMstdio.hnlUIFramework*g.pFrame

4、work=NULL;//Ribbon界面宿主程序classCApplication:publicCComObjectRootEx,publiclUlApplication//处理Ribbon界面的创建和初始化,publicIUICommandHandler//处理Ribbon控件的消息然后,我们需要利用COM_INTERFACE_ENTRY宏定义C0MJ1AP,在CApplication类的定义中,添加:public:BEGIN_COM_MAP(CApplication)CO

5、M_INTERFACE_ENTRY(IUIApplication)COM_INTERFACE_ENTRY(IUICommandHandler)END_COM_MAP()这样,Ribbon控件的消息就会发送到CApplication类,由CApplication类进行处理。在整个ScenicRibbonAPI屮,Ribbon控件消息的处理流程如下图所示。除了Z前我们介绍的跟Ribbon界面创建和初始化相关的过程之外,为了完成控件消息,我们首先需要为感兴趣的控件进行注册,这些工作都会在0nCreateCommand函数中

6、完成。完成控件的注册后,当我们需要进行消息处理的控件有消息发生时,IUIFnunework就会将这些消息发送给CApplication,而我们就町以在CApplication类中对具体的消息进行处理。Ribbon控件的消息主要分成两种:一种是来自控件的动作消息,比如按钮控件被点击,ComboBox的选择发生了变化等。这类消息都在Execute函数屮进行处理;另外一种是则对控件属性进行更新的消息,这类消息在UpdateProperty函数中进行处理。注册感兴趣的控件按照Ribbon界面控件消息的处理流程,我们首先需要在

7、OnCreateCommand函数中为我们感兴趣的控件进行注册,这样当控件有动作发生的吋候,CApplication类才会收到相应的控件消息,进而可以对其进行处理。在CApplication类的OnCreateCommand函数中,我们完成相应控件的注册:STDMETHOD(OnCreateUICommand)(UINT32nCmdID,_inUI.COMMANDTYPEtypelD,—deref_outIUICommandHandler**ppCommandHandler){//对相应控件的消息进行注册if(nCm

8、dID==cmdMyButton

9、

10、nCmdID==cmdDeleteTable

11、

12、nCmdID==cmdAddTable

13、

14、nCmdID==cmdPrintRelationships){retuniQueryInterface(IID_PPV_ARGS(ppCommandHandler));returnE_NOTIMPL;在这段代码中,我们根

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。