Win32 API 日本語リファレンス
ホームUI.Shell › IAutoComplete

IAutoComplete

COM
IID00bb2762-6a77-11d0-a535-00c04fd7d062継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

オートコンプリートオブジェクト(CLSID_AutoComplete)によって公開されます。このインターフェイスを使用すると、アプリケーションはオブジェクトの初期化、有効化、無効化を行うことができます。

解説(Remarks)

オートコンプリートは、エディットコントロールに部分的に入力された文字列を、完全な文字列に展開します。たとえば、Windows Internet Explorer のツールバーに埋め込まれたアドレスエディットコントロールにユーザーが URL を入力し始めると、オートコンプリートはその文字列を、既存の部分文字列と一致する 1 つ以上の完全な URL に展開します。「mic」のような部分的な URL 文字列は、「http://www.microsoft.com」や「http://www.microsoft.com/windows」に展開される場合があります。オートコンプリートは通常、エディットコントロールや、comboboxex コントロールのようにエディットコントロールが埋め込まれたコントロールで使用されます。

オートコンプリートには、完成した文字列を表示するための 2 つのモードがあります。これらのモードは独立しているため、どちらか一方または両方を有効にできます。モードを指定するには、IAutoComplete2::SetOptions を呼び出します。モードは次のとおりです。

オートコンプリートを実装する最も簡単な方法は、SHAutoComplete を呼び出すことです。この関数をシステムエディットコントロールに対して呼び出すと、そのコントロールは部分的に入力されたファイルシステムのパスまたは URL をオートコンプリートします。他の種類の文字列に対してオートコンプリートを有効にする場合や、オートコンプリートの動作をより細かく制御する場合は、基盤となるオートコンプリートオブジェクトを直接使用できます。

このインターフェイスは通常、アプリケーションによって実装されるものではありません。シェルのオートコンプリートオブジェクトによって公開され、アプリケーションによって使用されます。

オートコンプリートオブジェクトの IAutoComplete インターフェイスを使用して、オブジェクトの初期化や、オートコンプリートの有効化・無効化を行います。

オートコンプリートオブジェクトを使用してエディットコントロールにオートコンプリートを実装するには、次の手順を実行します。

  1. IEnumString インターフェイスをエクスポートする文字列リスト Component Object Model (COM) オブジェクトを実装します。この文字列リストオブジェクトは、オートコンプリートオブジェクトが完成文字列の候補として使用する文字列のリストを提供する役割を担います。
  2. CoCreateInstance でオートコンプリートオブジェクトのインスタンスを作成します。その IAutoComplete インターフェイスへのポインターを要求します。
  3. IAutoComplete::Init を呼び出します。hwndEdit パラメーターにエディットコントロールのウィンドウハンドルを設定します。エディットコントロールが別のコントロールに埋め込まれている場合は、エディットコントロール自体のハンドルを取得する必要があります。たとえば、comboboxex コントロールに埋め込まれたエディットコントロールのハンドルを取得するには、CBEM_GETEDITCONTROL メッセージを送信します。IAutoComplete::InitpunkACL パラメーターには、文字列リストオブジェクトの IUnknown ポインターを設定します。
  4. 既定のオプションを使用しない場合は、オートコンプリートオブジェクトの IAutoComplete2 インターフェイスへのポインターを取得します。IAutoComplete2::SetOptions を呼び出して、目的のオプションを設定します。
  5. オートコンプリートオブジェクトは、手順 3 で punkACL として渡された文字列リストオブジェクトの IUnknown ポインターを使用して、そのオブジェクトの IEnumString インターフェイスへのポインターを取得します。その後、オートコンプリートオブジェクトはそのインターフェイスを呼び出して候補文字列のリストを生成します。オートコンプリートオブジェクトは、そのリストからコントロール内の部分文字列に適切に一致する文字列を選択します。autoappend モードでは、文字列を完成させるために必要な文字が部分文字列に追加され、強調表示されます。autosuggest モードでは、1 つ以上の候補文字列のリストを含むドロップダウンボックスがエディットコントロールの下に表示されます。
  6. ユーザーがオートコンプリートされた文字列を確定すると、エディットコントロールはその文字列が手動で入力されたかのように動作します。
オートコンプリートは既定で有効になっています。アプリケーションは、オートコンプリートを無効にする場合や、無効になっているものを再度有効にする場合にのみ、IAutoComplete::Enable を呼び出す必要があります。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT Init(HWND hwndEdit, IUnknown* punkACL, LPWSTR pwszRegKeyPath, LPWSTR pwszQuickComplete)

オートコンプリートオブジェクトを初期化します。

hwndEditHWNDinオートコンプリートを有効にするシステムエディットコントロールのウィンドウへのハンドルです。
punkACLIUnknown*in完成文字列の候補を生成する文字列リストオブジェクトの IUnknown インターフェイスへのポインターです。このオブジェクトは IEnumString インターフェイスを公開している必要があります。
pwszRegKeyPathLPWSTRinoptionalフォーマット文字列が REG_SZ 値として格納されているレジストリパス(値の名前を含む)を指定する、省略可能な null 終端 Unicode 文字列へのポインターです。オートコンプリートオブジェクトは、まず HKEY_CURRENT_USER の下でパスを探します。失敗した場合は、HKEY_LOCAL_MACHINE を試みます。フォーマット文字列については、pwszQuickComplete の定義を参照してください。
pwszQuickCompleteLPWSTRinoptionalユーザーがテキストを入力して CTRL+ENTER を押した場合に使用するフォーマットを指定する、省略可能な null 終端 Unicode 文字列へのポインターです。クイック補完を無効にするには、このパラメーターを NULL に設定します。それ以外の場合、オートコンプリートオブジェクトは pwszQuickCompleteStringCchPrintf のフォーマット文字列として扱い、エディットボックス内のテキストを対応する引数として扱って、新しい文字列を生成します。たとえば、pwszQuickComplete を「http://www.%s.com/」に設定します。ユーザーがエディットボックスに「MyURL」を入力して CTRL+ENTER を押すと、エディットボックス内のテキストは「http://www.MyURL.com/」に更新されます。

戻り値

型: HRESULT

このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

vtbl 4 HRESULT Enable(BOOL fEnable)

オートコンプリートを有効または無効にします。

fEnableBOOLinオートコンプリートを有効にする場合は TRUE、無効にする場合は FALSE に設定する値です。

戻り値

型: HRESULT

成功した場合は S_OK を返し、それ以外の場合は COM エラー値を返します。

解説(Remarks)

オートコンプリートは既定で有効になっています。アプリケーションは、オートコンプリートを無効にする場合や、無効になっているものを再度有効にする場合にのみ、このメソッドを呼び出す必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。