IAutoComplete
COM公式ドキュメント
オートコンプリートオブジェクト(CLSID_AutoComplete)によって公開されます。このインターフェイスを使用すると、アプリケーションはオブジェクトの初期化、有効化、無効化を行うことができます。
解説(Remarks)
オートコンプリートは、エディットコントロールに部分的に入力された文字列を、完全な文字列に展開します。たとえば、Windows Internet Explorer のツールバーに埋め込まれたアドレスエディットコントロールにユーザーが URL を入力し始めると、オートコンプリートはその文字列を、既存の部分文字列と一致する 1 つ以上の完全な URL に展開します。「mic」のような部分的な URL 文字列は、「http://www.microsoft.com」や「http://www.microsoft.com/windows」に展開される場合があります。オートコンプリートは通常、エディットコントロールや、comboboxex コントロールのようにエディットコントロールが埋め込まれたコントロールで使用されます。
オートコンプリートには、完成した文字列を表示するための 2 つのモードがあります。これらのモードは独立しているため、どちらか一方または両方を有効にできます。モードを指定するには、IAutoComplete2::SetOptions を呼び出します。モードは次のとおりです。
- autoappend モードでは、オートコンプリートは最も可能性の高い候補文字列の残りの部分を既存の文字に追加し、追加された文字を強調表示します。エディットコントロールは、ユーザーが文字列全体を手動で入力してから追加部分を強調表示したかのように動作します。ユーザーが文字の入力を続けると、それらは既存の部分文字列に追加されます。ユーザーが次の強調表示された文字と同一の文字を入力した場合、その文字の強調表示は解除されます。残りの文字は引き続き強調表示されます。ユーザーが次の強調表示された文字と一致しない文字を入力した場合、オートコンプリートはより大きな部分文字列に基づいて新しい候補文字列の生成を試みます。そして、前と同様に、新しい候補文字列の残りの部分を現在の部分文字列に追加します。候補文字列が見つからない場合は、入力された文字のみが表示され、エディットボックスはオートコンプリートがない場合と同様に動作します。この処理は、ユーザーが文字列を確定するまで続きます。
- autosuggest モードでは、オートコンプリートはエディットコントロールの下に、1 つ以上の完全な候補文字列を含むドロップダウンリストを表示します。ユーザーは通常クリックによって候補文字列の 1 つを選択するか、入力を続けることができます。入力が進むにつれて、ドロップダウンリストは現在の部分文字列に基づいて変更される場合があります。IAutoComplete2::SetOptions の dwFlag パラメーターに ACO_SEARCH フラグを設定すると、ドロップダウンリストの一番下に「'XXX' を検索」という項目が追加されます。これは候補文字列がない場合でも表示されます。「XXX」には現在の部分文字列が設定され、ユーザーが入力を続けるにつれて更新されます。ユーザーが「'...' を検索」を選択した場合、アプリケーションは検索エンジンを起動してユーザーを支援する必要があります。
このインターフェイスは通常、アプリケーションによって実装されるものではありません。シェルのオートコンプリートオブジェクトによって公開され、アプリケーションによって使用されます。
オートコンプリートオブジェクトの IAutoComplete インターフェイスを使用して、オブジェクトの初期化や、オートコンプリートの有効化・無効化を行います。
オートコンプリートオブジェクトを使用してエディットコントロールにオートコンプリートを実装するには、次の手順を実行します。
- IEnumString インターフェイスをエクスポートする文字列リスト Component Object Model (COM) オブジェクトを実装します。この文字列リストオブジェクトは、オートコンプリートオブジェクトが完成文字列の候補として使用する文字列のリストを提供する役割を担います。
- CoCreateInstance でオートコンプリートオブジェクトのインスタンスを作成します。その IAutoComplete インターフェイスへのポインターを要求します。
- IAutoComplete::Init を呼び出します。hwndEdit パラメーターにエディットコントロールのウィンドウハンドルを設定します。エディットコントロールが別のコントロールに埋め込まれている場合は、エディットコントロール自体のハンドルを取得する必要があります。たとえば、comboboxex コントロールに埋め込まれたエディットコントロールのハンドルを取得するには、CBEM_GETEDITCONTROL メッセージを送信します。IAutoComplete::Init の punkACL パラメーターには、文字列リストオブジェクトの IUnknown ポインターを設定します。
- 既定のオプションを使用しない場合は、オートコンプリートオブジェクトの IAutoComplete2 インターフェイスへのポインターを取得します。IAutoComplete2::SetOptions を呼び出して、目的のオプションを設定します。
- オートコンプリートオブジェクトは、手順 3 で punkACL として渡された文字列リストオブジェクトの IUnknown ポインターを使用して、そのオブジェクトの IEnumString インターフェイスへのポインターを取得します。その後、オートコンプリートオブジェクトはそのインターフェイスを呼び出して候補文字列のリストを生成します。オートコンプリートオブジェクトは、そのリストからコントロール内の部分文字列に適切に一致する文字列を選択します。autoappend モードでは、文字列を完成させるために必要な文字が部分文字列に追加され、強調表示されます。autosuggest モードでは、1 つ以上の候補文字列のリストを含むドロップダウンボックスがエディットコントロールの下に表示されます。
- ユーザーがオートコンプリートされた文字列を確定すると、エディットコントロールはその文字列が手動で入力されたかのように動作します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
オートコンプリートオブジェクトを初期化します。
| hwndEdit | HWND | in | オートコンプリートを有効にするシステムエディットコントロールのウィンドウへのハンドルです。 |
| punkACL | IUnknown* | in | 完成文字列の候補を生成する文字列リストオブジェクトの IUnknown インターフェイスへのポインターです。このオブジェクトは IEnumString インターフェイスを公開している必要があります。 |
| pwszRegKeyPath | LPWSTR | inoptional | フォーマット文字列が REG_SZ 値として格納されているレジストリパス(値の名前を含む)を指定する、省略可能な null 終端 Unicode 文字列へのポインターです。オートコンプリートオブジェクトは、まず HKEY_CURRENT_USER の下でパスを探します。失敗した場合は、HKEY_LOCAL_MACHINE を試みます。フォーマット文字列については、pwszQuickComplete の定義を参照してください。 |
| pwszQuickComplete | LPWSTR | inoptional | ユーザーがテキストを入力して CTRL+ENTER を押した場合に使用するフォーマットを指定する、省略可能な null 終端 Unicode 文字列へのポインターです。クイック補完を無効にするには、このパラメーターを NULL に設定します。それ以外の場合、オートコンプリートオブジェクトは pwszQuickComplete を StringCchPrintf のフォーマット文字列として扱い、エディットボックス内のテキストを対応する引数として扱って、新しい文字列を生成します。たとえば、pwszQuickComplete を「http://www.%s.com/」に設定します。ユーザーがエディットボックスに「MyURL」を入力して CTRL+ENTER を押すと、エディットボックス内のテキストは「http://www.MyURL.com/」に更新されます。 |
戻り値
型: HRESULT
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
オートコンプリートを有効または無効にします。
| fEnable | BOOL | in | オートコンプリートを有効にする場合は TRUE、無効にする場合は FALSE に設定する値です。 |
戻り値
型: HRESULT
成功した場合は S_OK を返し、それ以外の場合は COM エラー値を返します。
解説(Remarks)
オートコンプリートは既定で有効になっています。アプリケーションは、オートコンプリートを無効にする場合や、無効になっているものを再度有効にする場合にのみ、このメソッドを呼び出す必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAutoComplete "{00BB2762-6A77-11D0-A535-00C04FD7D062}"
#usecom global IAutoComplete IID_IAutoComplete "{}"
#comfunc global IAutoComplete_Init 3 sptr,sptr,wstr,wstr
#comfunc global IAutoComplete_Enable 4 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。