Session ID : T2-401 マイクロソフト株式会社 エバンジェリスト 井上 章 Blog : http://blogs.msdn.com/chack/ 本セッションでは、 現在開発中のテクノロジーを取り扱っています。 仕様および機能は変更される可能性があります。 リボン UI とは? Office 2007 リボン Windows Scenic リボン リボン UI の特徴と利点 リボン開発プラットフォーム Scenic リボン アーキテクチャ リボン マークアップ リボン マークアップ コンパイラ 初期化とコールバック ヘッダファイルのインクルード IUIApplication の実装 IUICommandHander の実装 リボン UI の初期化と破棄 コントロールの追加とイベント処理 Scenic リボン コントロール まとめ Office 2007 で採用された新しいユーザーインター フェース タブと大きめに配置されたコントロールで構成 従来のメニュー バーに置き換わる UI Windows 7 ではリボン UI のための新たな API が標 準で用意され、アプリケーションで容易に実装でき る Windows 7 の ペイントやワードパッドでリボン UI が採用 以下の2種類に分けられる Office 2007 リボン Windows Scenic リボン Office ボタン タブ クイック アクセス ツールバー コンテキスト タブ セット ヘルプ コンテキスト タブ グループ(別名 “Chunk”) ダイアログ ボックス ラウンチャー アプリケーション メニュー タブ クイック アクセス ツールバー コンテキスト タブ セット グループ(別名 “Chunk”) ヘルプ コンテキスト タブ ダイアログ ボックス ラウンチャー Windows 7 に標準搭載, Windows Vista に配置可能 Win32 API, COM ベースの開発(まずはネイティブデベロッパを対象) Microsoft Office 2007 リボンとほぼ同等の機能を提供 統一されたユーザーエクスペリエンスの提供 大きくデザインされたボタンなどのコントロールと、ラ ベル表記によるコマンド説明 コンテキスト タブ による、選択オブジェクトに関連した コマンドのタブ表示 クイック アクセス ツールバーによるコマンドへの素早い アクセス コマンドを見つけやすい マウスでクリックしやすい 直観的なアプリケーション操作と操作方法の容易な習得 アプリケーションのユーザービリティ向上 ソフトウェアベンダのさまざまなニーズに対応 ターゲット: Managed ターゲット: MFC ネイティブ ターゲット: ネイティブ .NET Fx 3.5 必須 Windows 2000 以上 Windows Vista 以上 Office 2007 & Windows styles Office 2007 & Windows styles1 Windows styles Coming soon… 2009 年予定 Visual Studio 2008 SP1 に搭載 Coming soon… Windows 7 と同時 にリリース WPF MFC Scenic Microsoft の リボン Strategy 1 Office 2007 スタイル はリリース済み, Windows スタイル は 2009 年を予定 マークアップ ベースの UI XML によるリボン コントロール定義 小さく高性能なネイティブ コード ランタイム 最上位のメニュー バー機能をオーバーライドし、 リボン形式のコマンド UI をレンダリング COM API による初期化処理、およびコールバック メソッドの実装によるイベント処理 Windows Scenic リボン Markup コントロールの構成 <Ribbon> <Tab> <Button … /> </Tab> </Ribbon> COM API 初期化および イベント処理 MyHandler::Execute(…) { DoStuff(); } アプリケーショ ン固有のビジネ ス ロジック void DoStuff() { … … } <Application xmlns="http://schemas.microsoft.com/windows/2009/Scenic/Intent"> <Application.Commands> <!-- tabs --> <Command Name="TabHome" Symbol="cmdTabHome" Id="30000"> <Command.LabelTitle> <StringDef>Home</Stringdef> </Command.LabelTitle> </Command> <!-- chunks --> <Command Name="ChunkClipboard" Symbol="cmdChunkClipboard" Id="31002"> <Command.LabelTitle> <StringDef>Clipboard</StringDef> </Command.LabelTitle> <Command.LargeImages> <Image Source="Paste.bmp"/> </Command.LargeImages> </Command> <!-- Clipboard commands --> <Command Name="Paste" Symbol="cmdPaste" Id="57637”> <Command.LabelTitle> <StringDef>Paste</Stringdef> </Command.LabelTitle> <Command.LargeImages> <Image Source="Paste.bmp"/> </Command.LargeImages> </Command> </Application.Commands> <Application.Views> ... </Application.Views> </Application> <Application xmlns="http://schemas.microsoft.com/windows/2009/Scenic/Intent"> <Application.Commands> ... </Application.Commands> <Application.Views> <Ribbon Name="Microsoft.Scenic.Intent.RibbonSample"> <Ribbon.Tabs> <Tab CommandName="TabHome"> <Group CommandName="ChunkClipboard"> <Button CommandName="Paste"/> <Button CommandName="..."/> ... </Group> </Tab> <Tab CommandName=“..."> ... </Tab> ... </Ribbon.Tabs> </Ribbon> </Application.Views> </Application> IntentCL.exe リボン マークアップ (XML) を検証 バイナリ版 リボン マークアップを生成 アプリケーションビルドで使用するヘッダファイルとリ ソースファイルを生成 コマンドライン構文 IntentCL <ribbonFile> <binaryFile> /header:<headerFile> /res:<resourceFile> /name:<ribbonName> リボン マークアップ のアプリケーションへの組み込み markup.xml を記述 IntentCL.exe でコンパイル markup.bml ribbonres.h ribbonres.rc を生成 ※ リボン マークアップ の詳細は Windows SDK v7.0 ドキュメントを参照 オンライン:http://msdn.microsoft.com/en-us/library/dd371191(VS.85).aspx アプリケー ションの ビルド アプリケーションへの組み込み リボン プラットフォーム アプリケーション CoCreateInstance Initialize(HWND, IUIApplication*) LoadUI( resourceName ) OnCreateUICommand OnDestroyUICommand OnViewChanged IUIFramework IUIApplication マークアップコンパイラで生成したヘッダファイルと リソースファイルをインクルード // RibbonApplication.rc #include “ribbonres.h” #include “ribbonres.rc” ATL/COM ヘッダファイルをインクルード // stdafx.h #include <atlbase.h> #include <atlcom.h> #include <initguid.h> リボンインターフェース定義のヘッダファイルをイン クルード // RibbonImpl.cpp #include <scenicintent.h> #include <ScenicIntentPropertyHelpers.h> class CApplication : public CComObjectRootEx<CComMultiThreadModel> , public IUIApplication , public IUICommandHandler { public: BEGIN_COM_MAP(CApplication) COM_INTERFACE_ENTRY(IUIApplication) COM_INTERFACE_ENTRY(IUICommandHandler) END_COM_MAP() // IUIApplication インターフェースの実装 STDMETHOD(OnViewChanged)(UINT32 viewID, __in UI_VIEWTYPE typeID, __in IUnknown* pView, UI_VIEWVERB verb, INT32 uReasonCode); STDMETHOD(OnCreateUICommand)(UINT32 commandId, __in UI_COMMANDTYPE typeID, __deref_out IUICommandHandler** ppCommandHandler); STDMETHOD(OnDestroyUICommand)(UINT32 commandId, __in UI_COMMANDTYPE typeID, __in IUICommandHandler* pCommandHandler); ... 次スライドへ続く ... ... 前スライドの続き ... // IUICommandHandler インターフェースの実装 STDMETHODIMP Execute(UINT32 commandId, UI_EXECUTIONVERB verb, __in_opt const PROPERTYKEY* key, __in_opt const PROPVARIANT* ppropvarValue, __in_opt IUISimplePropertySet* pCommandExecutionProperties); }; STDMETHODIMP UpdateProperty(UINT32 commandId, __in REFPROPERTYKEY key, __in_opt const PROPVARIANT* currentValue, __out PROPVARIANT* newValue); IUIFramework* g_pFramework = NULL; HRESULT InitRibbon(CMainFrame* pFrame) { HRESULT hr = ::CoCreateInstance(CLSID_ScenicIntentUIFramework, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&g_pFramework)); CComPtr<CComObject<CApplication>> pApplication; hr = CComObject<CApplication>::CreateInstance(&pApplication); hr = g_pFramework->Initialize(*pFrame, pApplication); hr = g_pFramework->LoadUI(GetModuleHandle(NULL), L"APPLICATION_RIBBON"); } return hr; void DestroyRibbon() { if (g_pFramework){ g_pFramework->Destroy(); g_pFramework->Release(); g_pFramework = NULL; } } ボタンコントロールをタブグループへ追加 Markup.xml の Application.Commands 要素へ Command 要素を追加 <Command Name="Paste" Symbol="cmdPaste" Id="57637”> <Command.LabelTitle> <StringDef>Paste</Stringdef> </Command.LabelTitle> <Command.LargeImages> <Image Source="Paste.bmp"/> </Command.LargeImages> </Command> Application.Views 要素の Ribbon.Tabs 要素へ Button 要素を追加 <Tab CommandName="TabHome"> <Group CommandName="ChunkClipboard"> <Button CommandName="Paste"/> </Group> </Tab> IUICommandHandler インターフェース Execute メソッドの実装 STDMETHODIMP Execute(UINT32 commandId, UI_EXECUTIONVERB verb, __in_opt const PROPERTYKEY* key, __in_opt const PROPVARIANT* ppropvarValue, __in_opt IUISimplePropertySet* pCommandExecutionProperties) { switch (verb) { case UI_EXECUTIONVERB_EXECUTE: if (commandId == cmdPaste) { AfxMessageBox(“Paste!!”); } break; } return S_OK; } IUICommandHandler インターフェース UpdateProperty メソッドの実装 STDMETHODIMP UpdateProperty(UINT32 commandId, __in REFPROPERTYKEY key, __in_opt const PROPVARIANT* currentValue, __out PROPVARIANT* newValue) { BOOL fVal = TRUE; // or FALSE HRESULT hr = E_FAIL; if (key == UI_PKEY_Enabled) { hr = UIInitPropertyFromBoolean(UI_PKEY_Enabled, fVal, newValue); } return hr; } リボン UI 対応アプリケーション リボン UI により直観的なアプリケーション操作が可 能になり、ユーザービリティを向上することができる リボンプラットフォームにより基本処理が制御され、 リボンを使ったアプリケーションのインターフェース の一貫性が保たれる 今後、MFC および WPF ベースでもリボン UI 対応ア プリケーション開発が可能になり、アプリケーション への実装もさらに容易になる 統一されたユーザーエクスペリエンスの提供 アプリケーションのユーザービリティ向上 Windows Scenic Ribbon SDK Document: http://msdn.microsoft.com/en-us/library/dd371191(VS.85).aspx リボン ガイドライン (MSDN Library): http://msdn.microsoft.com/en-us/library/cc872782.aspx T2-201 Windows 7 機能概要 1月28日 13:15 - 14:25 T2-301 Windows 7:タスクバーを活用したアプリケー ションの開発 1月28日 14:40 - 15:50 T2-302 Windows 7:マルチタッチ アプリケーションの開 発 1月28日 17:30 - 18:40 T2-402 Windows 7:グラフィックス API 詳解 1月28日 16:05 - 17:15 © 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
© Copyright 2024 ExpyDoc