Managed MFC NET Fx 3 5 Windows 2000

  • Slides: 25
Download presentation

リボン開発プラットフォーム ソフトウェアベンダのさまざまなニーズに対応 ターゲット: Managed ターゲット: MFC ネイティブ ターゲット: ネイティブ . NET Fx 3. 5

リボン開発プラットフォーム ソフトウェアベンダのさまざまなニーズに対応 ターゲット: Managed ターゲット: MFC ネイティブ ターゲット: ネイティブ . NET Fx 3. 5 必須 Windows 2000 以上 Windows Vista 以上 Office 2007 & Windows styles 1 Windows styles Coming soon… 2009 年予定 Visual Studio 2008 SP 1 に搭載 Coming soon… Windows 7 と同時 にリリース WPF MFC Scenic Microsoft の リボン Strategy 1 Office 2007 スタイル はリリース済み, Windows スタイル は 2009 年を予定

リボン マークアップ(1) <Application xmlns="http: //schemas. microsoft. com/windows/2009/Scenic/Intent"> <Application. Commands> <!-- tabs --> <Command Name="Tab.

リボン マークアップ(1) <Application xmlns="http: //schemas. microsoft. com/windows/2009/Scenic/Intent"> <Application. Commands> <!-- tabs --> <Command Name="Tab. Home" Symbol="cmd. Tab. Home" Id="30000"> <Command. Label. Title> <String. Def>Home</Stringdef> </Command. Label. Title> </Command> <!-- chunks --> <Command Name="Chunk. Clipboard" Symbol="cmd. Chunk. Clipboard" Id="31002"> <Command. Label. Title> <String. Def>Clipboard</String. Def> </Command. Label. Title> <Command. Large. Images> <Image Source="Paste. bmp"/> </Command. Large. Images> </Command> <!-- Clipboard commands --> <Command Name="Paste" Symbol="cmd. Paste" Id="57637”> <Command. Label. Title> <String. Def>Paste</Stringdef> </Command. Label. Title> <Command. Large. Images> <Image Source="Paste. bmp"/> </Command. Large. Images> </Command> </Application. Commands> <Application. Views>. . . </Application. Views> </Application>

リボン マークアップ(2) <Application xmlns="http: //schemas. microsoft. com/windows/2009/Scenic/Intent"> <Application. Commands>. . . </Application. Commands> <Application.

リボン マークアップ(2) <Application xmlns="http: //schemas. microsoft. com/windows/2009/Scenic/Intent"> <Application. Commands>. . . </Application. Commands> <Application. Views> <Ribbon Name="Microsoft. Scenic. Intent. Ribbon. Sample"> <Ribbon. Tabs> <Tab Command. Name="Tab. Home"> <Group Command. Name="Chunk. Clipboard"> <Button Command. Name="Paste"/> <Button Command. Name=". . . "/>. . . </Group> </Tab> <Tab Command. Name=“. . . ">. . . </Tab>. . . </Ribbon. Tabs> </Ribbon> </Application. Views> </Application>

初期化とコールバック アプリケーションへの組み込み リボン プラットフォーム アプリケーション Co. Create. Instance Initialize(HWND, IUIApplication*) Load. UI( resource. Name

初期化とコールバック アプリケーションへの組み込み リボン プラットフォーム アプリケーション Co. Create. Instance Initialize(HWND, IUIApplication*) Load. UI( resource. Name ) On. Create. UICommand On. Destroy. UICommand On. View. Changed IUIFramework IUIApplication

ヘッダファイルのインクルード マークアップコンパイラで生成したヘッダファイルと リソースファイルをインクルード // Ribbon. Application. rc #include “ribbonres. h” #include “ribbonres. rc” ATL/COM

ヘッダファイルのインクルード マークアップコンパイラで生成したヘッダファイルと リソースファイルをインクルード // Ribbon. Application. rc #include “ribbonres. h” #include “ribbonres. rc” ATL/COM ヘッダファイルをインクルード // stdafx. h #include <atlbase. h> #include <atlcom. h> #include <initguid. h> リボンインターフェース定義のヘッダファイルをイン クルード // Ribbon. Impl. cpp #include <scenicintent. h> #include <Scenic. Intent. Property. Helpers. h>

IUIApplication の実装 class CApplication : public CCom. Object. Root. Ex<CCom. Multi. Thread. Model> ,

IUIApplication の実装 class CApplication : public CCom. Object. Root. Ex<CCom. Multi. Thread. Model> , public IUIApplication , public IUICommand. Handler { public: BEGIN_COM_MAP(CApplication) COM_INTERFACE_ENTRY(IUICommand. Handler) END_COM_MAP() // IUIApplication インターフェースの実装 STDMETHOD(On. View. Changed)(UINT 32 view. ID, __in UI_VIEWTYPE type. ID, __in IUnknown* p. View, UI_VIEWVERB verb, INT 32 u. Reason. Code); STDMETHOD(On. Create. UICommand)(UINT 32 command. Id, __in UI_COMMANDTYPE type. ID, __deref_out IUICommand. Handler** pp. Command. Handler); STDMETHOD(On. Destroy. UICommand)(UINT 32 command. Id, __in UI_COMMANDTYPE type. ID, __in IUICommand. Handler* p. Command. Handler); . . . 次スライドへ続く. . .

IUICommand. Hander の実装. . . 前スライドの続き. . . // IUICommand. Handler インターフェースの実装 STDMETHODIMP Execute(UINT

IUICommand. Hander の実装. . . 前スライドの続き. . . // IUICommand. Handler インターフェースの実装 STDMETHODIMP Execute(UINT 32 command. Id, UI_EXECUTIONVERB verb, __in_opt const PROPERTYKEY* key, __in_opt const PROPVARIANT* ppropvar. Value, __in_opt IUISimple. Property. Set* p. Command. Execution. Properties); }; STDMETHODIMP Update. Property(UINT 32 command. Id, __in REFPROPERTYKEY key, __in_opt const PROPVARIANT* current. Value, __out PROPVARIANT* new. Value);

リボン UI の初期化と破棄 IUIFramework* g_p. Framework = NULL; HRESULT Init. Ribbon(CMain. Frame* p. Frame)

リボン UI の初期化と破棄 IUIFramework* g_p. Framework = NULL; HRESULT Init. Ribbon(CMain. Frame* p. Frame) { HRESULT hr = : : Co. Create. Instance(CLSID_Scenic. Intent. UIFramework, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&g_p. Framework)); CCom. Ptr<CCom. Object<CApplication>> p. Application; hr = CCom. Object<CApplication>: : Create. Instance(&p. Application); hr = g_p. Framework->Initialize(*p. Frame, p. Application); hr = g_p. Framework->Load. UI(Get. Module. Handle(NULL), L"APPLICATION_RIBBON"); } return hr; void Destroy. Ribbon() { if (g_p. Framework){ g_p. Framework->Destroy(); g_p. Framework->Release(); g_p. Framework = NULL; } }

コントロールの追加とイベント処理(1) ボタンコントロールをタブグループへ追加 Markup. xml の Application. Commands 要素へ Command 要素を追加 <Command Name="Paste" Symbol="cmd. Paste"

コントロールの追加とイベント処理(1) ボタンコントロールをタブグループへ追加 Markup. xml の Application. Commands 要素へ Command 要素を追加 <Command Name="Paste" Symbol="cmd. Paste" Id="57637”> <Command. Label. Title> <String. Def>Paste</Stringdef> </Command. Label. Title> <Command. Large. Images> <Image Source="Paste. bmp"/> </Command. Large. Images> </Command> Application. Views 要素の Ribbon. Tabs 要素へ Button 要素を追加 <Tab Command. Name="Tab. Home"> <Group Command. Name="Chunk. Clipboard"> <Button Command. Name="Paste"/> </Group> </Tab>

コントロールの追加とイベント処理(2) IUICommand. Handler インターフェース Execute メソッドの実装 STDMETHODIMP Execute(UINT 32 command. Id, UI_EXECUTIONVERB verb, __in_opt

コントロールの追加とイベント処理(2) IUICommand. Handler インターフェース Execute メソッドの実装 STDMETHODIMP Execute(UINT 32 command. Id, UI_EXECUTIONVERB verb, __in_opt const PROPERTYKEY* key, __in_opt const PROPVARIANT* ppropvar. Value, __in_opt IUISimple. Property. Set* p. Command. Execution. Properties) { switch (verb) { case UI_EXECUTIONVERB_EXECUTE: if (command. Id == cmd. Paste) { Afx. Message. Box(“Paste!!”); } break; } return S_OK; }

コントロールの追加とイベント処理(3) IUICommand. Handler インターフェース Update. Property メソッドの実装 STDMETHODIMP Update. Property(UINT 32 command. Id, __in

コントロールの追加とイベント処理(3) IUICommand. Handler インターフェース Update. Property メソッドの実装 STDMETHODIMP Update. Property(UINT 32 command. Id, __in REFPROPERTYKEY key, __in_opt const PROPVARIANT* current. Value, __out PROPVARIANT* new. Value) { BOOL f. Val = TRUE; // or FALSE HRESULT hr = E_FAIL; if (key == UI_PKEY_Enabled) { hr = UIInit. Property. From. Boolean(UI_PKEY_Enabled, f. Val, new. Value); } return hr; }

© 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows Vista and other product names

© 2009 Microsoft Corporation. All rights reserved. Microsoft, 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.