IACList
COM公式ドキュメント
候補文字列が階層構造で編成されている場合に、オートコンプリートの効率を向上させるメソッドを公開します。
解説(Remarks)
オートコンプリートには通常、次の3つのコンポーネントが必要です。
- オートコンプリートクライアント。このクライアントは、エディットコントロールをホストするダイアログボックスなどのウィンドウです。
- オートコンプリートオブジェクト (CLSID_AutoComplete)。このオブジェクトはシステムによって提供され、ユーザーインターフェイス、解析、およびバックグラウンドスレッドの管理を処理します。
- オートコンプリートリストオブジェクト。このオブジェクトは、候補文字列のリストをオートコンプリートオブジェクトに提供する役割を担います。
リストオブジェクトが取り得る最も単純な方法は、オートコンプリートオブジェクトが要求を行うたびに、名前空間内のすべての文字列を返すことです。この種のリストオブジェクトを実装する方法については、IAutoComplete を参照してください。ただし、この方法は名前空間が比較的小さい場合にのみ実用的です。多数の文字列が関係する場合、リストオブジェクトは名前空間の小さなサブセットに自身を制限する必要があります。
IACList インターフェイスはオートコンプリートリストオブジェクトによってエクスポートされ、階層構造で編成された名前空間から適切な文字列のサブセットを選択するのに役立ちます。大きな名前空間では、この手順によってオートコンプリートの効率が大幅に向上します。基本的な手順は次のとおりです。
- オートコンプリートオブジェクトがリストオブジェクトの IEnumString インターフェイスを呼び出します。リストオブジェクトは階層内の最上位項目の名前を返します。たとえば、名前空間が C: ドライブ上のすべてのファイルとフォルダーで構成されている場合、リストオブジェクトは C:\ ディレクトリに含まれるフォルダーとファイルの完全修飾パスを返します。
- ユーザーは区切り文字を入力するまで入力を続けます。'\' 文字と '/' 文字は、オートコンプリートオブジェクトによって区切り文字として認識されます。
- オートコンプリートオブジェクトがリストオブジェクトの IACList::Expand メソッドを呼び出し、現在の部分文字列を渡します。
- オートコンプリートオブジェクトがリストオブジェクトの IEnumString インターフェイスを再度呼び出して、新しい文字列のリストを要求します。部分文字列が名前空間内の最上位項目のいずれかと一致する場合、リストオブジェクトは選択された項目の直下にある項目の名前を返します。たとえば、ユーザーが "C:\Program Files\" を入力した場合、リストオブジェクトはそのディレクトリに含まれるファイルとフォルダーの名前を返します。IACList::Expand に渡された名前がどの最上位項目とも一致しない場合、リストオブジェクトは、オートコンプリートオブジェクトがリストオブジェクトの名前空間内にある文字列で IACList::Expand を呼び出すまで、文字列を返すのを単純に停止できます。
- この処理は、通常は ENTER キーを押すことによってユーザーが文字列を選択するまで続きます。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
オートコンプリートクライアントに対し、その名前空間内の指定された項目に関連付けられた候補文字列を生成するよう要求します。
| pszExpand | LPWSTR | in | オートコンプリートオブジェクトによって展開される、null 終端の Unicode 文字列へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
オートコンプリートオブジェクトは、エディットコントロールに区切り文字が入力されたときにこのメソッドを呼び出します。pszExpand が指す文字列がオートコンプリートクライアントの名前空間内の項目と一致する場合、クライアントは名前空間階層内で pszExpand の直下にある項目の文字列を生成します。クライアントは、次回オートコンプリートオブジェクトがクライアントの IEnumString インターフェイスを呼び出したときに、それらの文字列を返します。
たとえば、クライアントの名前空間が C: ドライブ上のすべてのファイルとフォルダーで構成されており、pszExpand に "C:\Program Files" が設定されている場合、クライアントは "C:\Program Files" のファイルとサブフォルダーの完全修飾パスに対応する文字列のリストを生成する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IACList "{77A130B0-94FD-11D0-A544-00C04FD7D062}"
#usecom global IACList IID_IACList "{}"
#comfunc global IACList_Expand 3 wstr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。