IUIFramework::Initialize 方法 (uiribbon.h)

将主机应用程序连接到 Windows 功能区框架。

语法

HRESULT Initialize(
  [in] HWND           frameWnd,
  [in] IUIApplication *application
);

参数

[in] frameWnd

类型:HWND

包含功能区的顶级窗口的句柄。

[in] application

类型: IUIApplication*

指向主机应用程序的 IUIApplication 实现的指针。

返回值

类型: HRESULT

如果成功,则返回S_OK;否则为以下列表中的错误值。

说明
HRESULT_FROM_WIN32 (ERROR_INVALID_WINDOW_HANDLE) frameWndNULL,不指向现有窗口,或者不是桌面的顶级窗口。
注意如果 frameWnd 是子窗口 (WS_CHILD) ,声明为工具窗口 (WS_EX_TOOLWINDOW) ,或者缺少描述文字属性, (WS_CAPTION 是必需的) ,也会返回此错误。
 
HRESULT_FROM_WIN32 (ERROR_WINDOW_OF_OTHER_THREAD) frameWnd 不归执行线程所有。
E_POINTER 应用程序NULL 或无效指针。

注解

对于需要功能区的每个顶级窗口,主机应用程序必须调用此方法。

此方法用于设置挂钩,使功能区框架能够在主机应用程序中调用回调。

若要成功初始化功能区,编译的功能区标记文件必须可用作资源,并在后续调用 IUIFramework::LoadUI 时指定。 此标记文件是框架不可或缺的组件;它指定要使用的控件及其布局。

如果 IUIFramework::Initialize 成功返回:

  • 为了消除功能区与传统命令模型之间的不一致、冗余和不兼容,功能区框架删除了主机应用程序中顶级窗口的标准菜单栏。
  • 框架删除对WS_EX_CLIENTEDGE样式的引用。
    注意 WS_EX_CLIENTEDGE样式指定窗口具有带有凹陷边缘的边框。 此样式在视觉上干扰功能区和主机应用程序的集成。
     
  • 框架要求启用WS_SYSMENU样式。 如果未启用WS_SYSMENU,则框架不提供替代功能,并且可能导致功能区呈现不可预知。
    注意 WS_SYSMENU样式指定应用程序窗口的标题栏上有一个系统菜单。 通过关联,还必须指定WS_CAPTION样式, () 上方的 返回值 中看到ERROR_INVALID_WINDOW_HANDLE。
     

示例

下面的示例演示了一个基本的框架初始化函数。

//
//  FUNCTION:    InitializeFramework(HWND)
//
//  PURPOSE:    Initialize the Ribbon framework and bind a Ribbon to the application.
//
//  PARAMETERS:    
//                hWnd - Handle to the Ribbon host application window. 
//
//  COMMENTS:
//
//    In order to get a Ribbon to display, the Ribbon framework must be initialized. 
//    This involves three important steps:
//      1) Instantiate the Ribbon framework object (CLSID_UIRibbonFramework).
//      2) Pass the host HWND and IUIApplication object to the framework.
//      3) Load the binary markup compiled by the UI Command Compiler (UICC.exe).
//
//
bool InitializeFramework(HWND hWnd)
{
    // Instantiate the Ribbon framework object.
    HRESULT hr = CoCreateInstance(
        CLSID_UIRibbonFramework, 
        NULL, 
        CLSCTX_INPROC_SERVER, 
        IID_PPV_ARGS(&g_pFramework));
    if (!SUCCEEDED(hr))
    {
        return false;
    }    

    // Create the application object (IUIApplication) and call the 
    // framework Initialize method, passing the application object and the 
    // host HWND that the Ribbon will attach itself to.
    CComObject<CApplication> *pApplication = NULL;
    CComObject<CApplication>::CreateInstance(&pApplication);
    hr = pApplication->QueryInterface(&g_pApplication);
    if (!SUCCEEDED(hr))
    {
        return false;
    } 

    hr = g_pFramework->Initialize(hWnd, g_pApplication);
    if (!SUCCEEDED(hr))
    {
        return false;
    }

    // Load the binary markup.  
    // Initiate callbacks to the IUIApplication object that was 
    // provided to the framework earlier and bind command handler(s) 
    // to individual commands.
    hr = g_pFramework->LoadUI(GetModuleHandle(NULL), L"APPLICATION_RIBBON");
    if (!SUCCEEDED(hr))
    {
        return false;
    }
    return true;
}

要求

要求
最低受支持的客户端 Windows 7 [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
目标平台 Windows
标头 uiribbon.h
DLL Mshtml.dll

另请参阅

IUIFramework

IUIFramework::LoadUI

标记元素

Windows 功能区框架示例