技术开发 频道

VS 2010与Windows7共舞:又见Ribbon

  为Ribbon界面创建宿主对象

  以上的步骤,我们只是完成了Ribbon界面资源的准备,为了实现Ribbon界面的创建,我们还需要为Ribbon界面创建一个宿主对象,这个宿主对象可以接受来自Ribbon界面的不同控件消息,完成Ribbon界面的创建和初始化。

  首先,我们需要为项目添加ATL支持,在项目属性中,选择使用静态ATL或者动态ATL:


图7 添加ATL支持

  然后,我们为项目添加一个cpp文件,并在其中实现一个派生自IUIApplication的类,这就是我们为Ribbon界面创建的宿主对象类。

/Precompiled header for the project:
#include
"stdafx.h"

//ATL/COM header files:
#include
<atlbase.h>
#include
<atlcom.h>
#include
<initguid.h>

// 引入<uiribbon.h>,其中定义了实现Ribbon界面所需要的所有接口
#include
<uiribbon.h>

IUIFramework
* g_pFramework = NULL;

// 宿主对象类
class CApplication
    :
public CComObjectRootEx<CComMultiThreadModel>
    ,
public IUIApplication
{
public:
    BEGIN_COM_MAP(CApplication)
        COM_INTERFACE_ENTRY(IUIApplication)
    END_COM_MAP()


    STDMETHOD(OnViewChanged)(UINT32 nViewID, __in UI_VIEWTYPE typeID, __in IUnknown
* pView, UI_VIEWVERB verb, INT32 uReasonCode)  
    {
        return E_NOTIMPL;
    }

    STDMETHOD(OnCreateUICommand)(UINT32 nCmdID, __in UI_COMMANDTYPE typeID, __deref_out IUICommandHandler
** ppCommandHandler)
    {
        return E_NOTIMPL;
    }

    STDMETHOD(OnDestroyUICommand)(UINT32 commandId, __in UI_COMMANDTYPE typeID, __in_opt IUICommandHandler
* pCommandHandler)
    {
        return E_NOTIMPL;
    }
};

  在这段代码中,我们首先引入了ATL和COM需要的头文件,同时,为了使用Ribbon界面,我们引入了Ribbon界面的头文件。然后,我们创建了一个从IUIApplication派生的类CApplication,并实现了几个必要的成员函数。在这里我们对这些消息并不进行处理,只是简单地返回E_NOTIMPL就可以了。

0
相关文章