ISyncMgrUIOperation
COM公式ドキュメント
同期ハンドラーまたは同期項目が、同期センターから要求されたときに UI オブジェクトを表示するためのメソッドを公開します。
解説(Remarks)
ハンドラーは、特定のアクション用の UI を提供するために ISyncMgrUIOperation を実装します。各アクション(参照、スケジュール設定、有効化/無効化、アクティブ化/非アクティブ化、削除)ごとに、それぞれ個別の実装が必要です。
ハンドラーは、UI を表示したい操作についてのみこのインターフェイスを実装してください。
以下は、同期センターがこのインターフェイスをインスタンス化して使用するために実行する手順の概要です。
- 同期センターは、UI 操作用の別スレッドを作成します。
- 同期センターは、ハンドラーの新しいインスタンスを作成します。
- 操作にハンドラーのみが関与する場合、同期センターは適切な SYNCMGR_OBJECTID オブジェクト ID を指定して ISyncMgrHandler::GetObject を呼び出し、その UI オブジェクトを実装する ISyncMgrUIOperation へのポインターを取得します。たとえば、同期センターは SYNCMGR_OBJECTID_QueryBeforeDelete を指定して ISyncMgrHandler::GetObject を呼び出し、ユーザーがハンドラーの削除を選択したときに、本当に削除するかどうかの確認を求める UI を表示するために呼び出されるオブジェクトを取得します。
- 操作に同期項目が関与する場合、同期センターは以下を含む一連の呼び出しを行います。
- ISyncMgrHandler インターフェイスに対して QueryInterface が呼び出され、ISyncMgrSyncItemContainer のインスタンスが取得されます。
- ISyncMgrSyncItemContainer::GetSyncItem が呼び出され、その項目を表す ISyncMgrSyncItem インスタンスへのポインターが取得されます。
- 適切な SYNCMGR_OBJECTID オブジェクト ID を指定して ISyncMgrSyncItem::GetObject が呼び出され、UI オブジェクトを実装する ISyncMgrUIOperation へのポインターが取得されます。
- 同期センターは、UI オブジェクトの Run メソッドを呼び出して UI を表示します。
ユーザーがあるアクションを要求し、最初のアクションが完了する前に同じアクションを再び要求した場合、最初のアクションの UI がアクティブ化され、前面に表示されます。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
同期センターから要求されたときに、ハンドラーまたは同期項目のための UI を実際に表示します。
| hwndOwner | HWND | in | UI の表示に使用するウィンドウへのハンドル。 |
戻り値
型: HRESULT
成功した場合は S_OK を返し、それ以外の場合はエラー値を返します。ハンドラーのアクティブ化や同期項目の無効化などの操作を確認するためにこのメソッドが呼び出されたものの、その操作を実行すべきでない場合は、S_FALSE または別のエラーコードを返します。
解説(Remarks)
UI ではなくハンドラー自体が、UI 内でユーザーが行った選択によって生じた状態の変化を同期センターに通知するために、ISyncMgrControl インターフェイスを使用することが想定されています。
例
次の例は、このメソッドの実装の概要を示しています。この場合、実装は、SYNCMGR_OBJECTID_QueryBeforeDelete オブジェクト ID を指定して GetObject が呼び出されたときに返されるものです。
STDMETHODIMP CQueryBeforeDelete::Run(__in HWND hwndOwner)
{
HRESULT hr = S_OK;
// Display a dialog confirming that the user wants to delete the item.
return hr;
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISyncMgrUIOperation "{FC7CFA47-DFE1-45B5-A049-8CFD82BEC271}"
#usecom global ISyncMgrUIOperation IID_ISyncMgrUIOperation "{}"
#comfunc global ISyncMgrUIOperation_Run 3 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。