IWizardExtension
COM公式ドキュメント
Web 発行ウィザードやオンライン印刷注文ウィザードなど、サーバー側のコンテンツ ページをホストするウィザードで使用されます。このインターフェイスは、サポートする拡張ページを指定し、それらのページへの移動および移動元への復帰を行うメソッドを公開します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
それらのページを表す PROPSHEETPAGE 構造体のハンドルで配列を埋めることにより、ウィザードに拡張ページを追加します。
| aPages | HPROPSHEETPAGE* | out | ウィザード ダイアログ ページを表す PROPSHEETPAGE ハンドルの配列へのポインター。拡張ページの PROPSHEETPAGE 構造体へのハンドルがこの配列に追加されます。 |
| cPages | DWORD | in | aPages 内の要素数。 |
| pnPagesAdded | DWORD* | out | 正常に追加されたハンドルの数。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
aPages が指すハンドルの配列には、拡張ページの前後にあるウィザード ダイアログ ページのハンドルを含めることができます。配列のポインターは、単に最初の要素ではなく、最初の拡張ページのハンドルを受け入れる準備が整った、最初の空の配列要素を値として指すようにしてこのメソッドに渡す必要があります。同様に、cPages に渡す値は、要素の総数ではなく、未使用の配列要素の数を示す必要があります。
たとえば、2 つの導入用ホスト ページが hpages という配列に追加された場合、IWizardExtension::AddPages の呼び出しは次のようになります。
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
g_iwe->AddPages(&hpages[2], ARRAYSIZE(hpages)-2, &nPages);
ウィザード ページ(PROPSHEETPAGE 構造体)を、ホストされる HTML ページと混同しないでください。1 つのウィザード ダイアログ ページは、複数の連続した HTML ページをホストできます。このメソッドが提供するのは、ウィザード拡張によって追加されるウィザード ダイアログ ページの数であり、その中に表示されるサーバー側 HTML ページの数ではありません。
ウィザード拡張の最初のページへのハンドルを取得します。
| phpage | HPROPSHEETPAGE* | out | ウィザード拡張ページの最初のページを表す PROPSHEETPAGE ハンドルへのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
ウィザード拡張は複数の連続した HTML ページをホストできますが、ページが 1 つのみで構成される場合は、IWizardExtension::GetFirstPage と IWizardExtension::GetLastPage が返すハンドルは同じになります。
ウィザード拡張ページの最終ページへのハンドルを取得します。
| phpage | HPROPSHEETPAGE* | out | ウィザード拡張の最終ページを表す PROPSHEETPAGE ハンドルへのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
この値は、ユーザーが 戻る ボタンをクリックしたときに、ウィザード拡張ページへ後方に移動するために使用されます。
ウィザード拡張は複数の連続した HTML ページをホストできますが、ページが 1 つのみで構成される場合は、IWizardExtension::GetFirstPage と IWizardExtension::GetLastPage が返すハンドルは同じになります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWizardExtension "{C02EA696-86CC-491E-9B23-74394A0444A8}" #usecom global IWizardExtension IID_IWizardExtension "{}" #comfunc global IWizardExtension_AddPages 3 sptr,int,var #comfunc global IWizardExtension_GetFirstPage 4 sptr #comfunc global IWizardExtension_GetLastPage 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWizardExtension "{C02EA696-86CC-491E-9B23-74394A0444A8}" #usecom global IWizardExtension IID_IWizardExtension "{}" #comfunc global IWizardExtension_AddPages 3 sptr,int,sptr #comfunc global IWizardExtension_GetFirstPage 4 sptr #comfunc global IWizardExtension_GetLastPage 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。