オートコンプリートを手動で有効にする方法
オートコンプリートの動作をより詳細に制御したり、オートコンプリート文字列のカスタム ソースを追加したりするには、オートコンプリート オブジェクトを自分で管理する必要があります。 オートコンプリートは、次の方法で手動で有効にすることができます。
Instructions
単純オートコンプリート オブジェクトの作成
次の手順では、単純なオートコンプリート オブジェクトを作成して初期化する方法を示します。 単純なオートコンプリート オブジェクトは、1 つのソースから文字列を完成させます。 この例では、エラー チェックは意図的に省略されています。
オートコンプリート オブジェクトを作成します。
IAutoComplete *pac; HRESULT hr = CoCreateInstance(CLSID_AutoComplete, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pac));
オートコンプリート ソースを作成します。 定義済みのオートコンプリート ソースを使用することも、独自のカスタム ソースを記述することもできます。
次のコードでは、定義済みのオートコンプリート ソースのいずれかを使用します。
IUnknown *punkSource; hr = CoCreateInstance(CLSID_ACListISF, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&punkSource));
次のコードでは、カスタムオートコンプリート ソースを使用します。 IEnumString インターフェイスを公開する オブジェクトを実装することで、独自のオートコンプリート ソースを作成できます。 オブジェクトは、必要に応じて IACList インターフェイスと IACList2 インターフェイスを実装することもできます。
CCustomAutoCompleteSource *pcacs = new CCustomAutoCompleteSource(); hr = pcacs->QueryInterface(IID_PPV_ARGS(&punkSource)); if(SUCCEEDED(hr)) { // ... } pcacs->Release();
オートコンプリート ソースのオプションを設定します (省略可能)。
ソースが IACList2 インターフェイスを公開している場合は、そのオプションを設定することで、オートコンプリート ソースの動作をカスタマイズできます。 定義済みのオートコンプリート ソースを使用する場合は、 CLSID_ACListISFのみが IACList2 をエクスポートします。 オプションとその値の完全な一覧については、「 IACList2::SetOptions」を参照してください。
IACList2 *pal2; hr = punkSource->QueryInterface(IID_PPV_ARGS(&pal2)); if (SUCCEEDED(hr)) { hr = pal2->SetOptions(ACLO_FILESYSONLY); pal2->Release(); }
オートコンプリート オブジェクトを初期化します。
この例では、 hwndEdit はオートコンプリートを有効にする編集コントロール ウィンドウのハンドルです。 最後の 2 つの未使用パラメーターの説明については、「 IAutoComplete::Init 」を参照してください。
hr = pac->Init(hwndEdit, punkSource, NULL, NULL);
オートコンプリート オブジェクトのオプションを設定します (省略可能)。
オートコンプリート オブジェクトの動作をカスタマイズするには、そのオプションを設定します。 オプションとその値の完全な一覧については、 IACList2::SetOptions のドキュメントを参照してください。
IAutoComplete2 *pac2; hr = pac->QueryInterface(IID_PPV_ARGS(&pac2)); if (SUCCEEDED(hr)) { hr = pac2->SetOptions(ACO_AUTOSUGGEST); pac2->Release(); }
オブジェクトを解放します。
注意
オートコンプリート オブジェクトは、解放した後も編集コントロールにアタッチされたままです。 後でこれらのオブジェクトにアクセスする必要がある場合 (たとえば、後でオートコンプリート オプションを変更する場合)、この時点でオブジェクトを解放する必要はありません。
punkSource->Release(); pac->Release();
複合オートコンプリート オブジェクトの作成
複合オートコンプリート オブジェクトは、複数のソースの文字列と一致します。 たとえば、Windows インターネット エクスプローラー アドレス バーでは、ユーザーがファイルまたは URL の名前の入力を開始する可能性があるため、複合オートコンプリート オブジェクトが使用されます。 複合オートコンプリート オブジェクトの作成に関連する手順のほとんどは、「単純オートコンプリート オブジェクトの作成」の手順と同じです。これらの手順は、そのように示されます。
オートコンプリート オブジェクトを作成します。 これは、上記の手順 1 と同じです。
オートコンプリート複合ソース オブジェクト マネージャーを作成します。
オートコンプリート複合ソース オブジェクトを使用すると、複数のオートコンプリート ソースを 1 つのオートコンプリート ソースに結合できます。
IObjMgr *pom; hr = CoCreateInstance(CLSID_ACLMulti, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pom));
オートコンプリート ソースごとにオプションを作成して設定します。 ソースごとに上記の手順 2 と 3 を繰り返します。
各オートコンプリート ソースをソース オブジェクト マネージャーにアタッチします。
hr = pom->Append(punkSource1); hr = pom->Append(punkSource2);
オートコンプリート オブジェクトを初期化します。
これは上記の手順 4 と同じですが、単純なオートコンプリート ソースを IAutoComplete::Init に渡す代わりに、複合ソース オブジェクト マネージャーを渡す点が除きます。
hr = pac->Init(hwndEdit, pom, NULL, NULL);
オートコンプリート オブジェクトのオプションを設定します。 これは、上記の手順 5 と同じです。
オブジェクトを解放します。
単純なケースと同様に、オブジェクトの使用が完了したらすぐにオブジェクトを解放できますが、後でオプションを変更するために保持することもできます。
pac->Release(); pom->Release(); // Release each individual source. punkSource1->Release(); punkSource2->Release();