技术开发 频道

VS 2010与Windows7共舞:又见Ribbon

  初始化Ribbon界面

  完成Ribbon界面的宿主对象后,我们就可以利用这个对象来创建和初始化Ribbon界面了。在Ribbon.cpp中实现一个全局函数进行Ribbon界面的初始化:

IUIFramework* g_pFramework = NULL;
/// 初始化Ribbon界面
HRESULT InitRibbon(HWND hWindowFrame)
{
        
//  调用CoCreateInstance创建一个CLSID_UIRibbonFramework的实例,
//  创建成功后,我们将得到一个IUIFramework对象,
//  并保存在g_pFramework这个实例对象中
        
//
    HRESULT hr
= ::CoCreateInstance(CLSID_UIRibbonFramework, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&g_pFramework));
    
if(FAILED(hr))
    {
        return hr;
    }

    
// 创建一个宿主对象CApplication
    CComObject
<CApplication> *pApplication = NULL;
    hr
= CComObject<CApplication>::CreateInstance(&pApplication);
    
if(FAILED(hr))
    {
        return hr;
    }

  
// 利用Ribbon Framework对象初始化宿主对象
    hr
= g_pFramework->Initialize(hWindowFrame, pApplication);
    
if(FAILED(hr))
    {
        return hr;
    }

    
// 加载Ribbon界面资源,也就是加载XML文件对Ribbon界面的描述
            
// Scenic Ribbon API将以此为根据创建Ribbon界面
    g_pFramework
->LoadUI(GetModuleHandle(NULL), L"APPLICATION_RIBBON");
    
if(FAILED(hr))
    {
        return hr;
    }

    return S_OK;
};

  在这段代码中,我们通过这样三个步骤来完成Ribbon的初始化:

  • 首先我们调用CoCreateInstance创建IUIFramework对象

  • 然后然后创建宿主对象CApplication,并利用IUIFramework对象初始化Ribbon界面的宿主对象CApplication

  • 最后通过IUIFramework对象加载Ribbon界面资源,以此来完成整个Ribbon界面的初始化过程。

  整个过程如下图所示:


图8 Ribbon界面的创建和初始化过程

0
相关文章