オートコンプリート機能を付ける[簡易編]

 Internet Explorer 5.0から利用できるようになった機能の一つに、オートコンプリートというのがあるのはご存じの方もいると思います。たとえば、Webのフォームなどで一度入力したことのある文字なら、始めの数文字を入れるだけでリストが出てきてそれから選択できる物です。この機能は自分のアプリケーションでも実装可能です。今回は「簡易版」ですので、[ファイル][URL履歴]などしかリストに表示できませんが、パスを選択するテキストボックスにこの機能を付ければ、ひと味違ったユーザフレンドリーなダイアログになるかと思います。

 当然ですが、この機能を利用するには、Internet Explorer 5.0 以上の環境でないといけないので、それ以外の環境では動きません。やり方は至極簡単で、あるAPI関数を一つ呼び出せばすみます。(だから簡易版なんです) 自由な文字列を表示できる物もありますが、最近やり方がわかったのでちょっと念入りにチェック中です...

 呼び出すAPIは、 SHLWAPI.DLLの SHAutoComplete関数です。古いSDKでは、ヘルプやヘッダに載ってないと思いますが、IE5以上の環境ではちゃんと動きます。Win2000 RC1くらい相当のSDKが入れてあれば、インポートライブラリでリンクして終わるのですが、それだと、IE5がないと起動すらできませんので、隠し関数の時と同様にアドレスを取得します。それと、この関数を呼び出す前にCoInitializeまたはOleInitialize関数を呼び出してOLEを初期化してください

// SHAutoComplete関数の型
typedef HRESULT (WINAPI *SHAUTOCOMPLETE)
    (HWND hwndEdit, DWORD dwFlags);
SHAUTOCOMPLETE SHAutoCompleteAPI;

HANDLE hSHlwapi = LoadLibrary("SHLWAPI.DLL");
if (hSHlwapi)
{
    SHAutoCompleteAPI = (SHAUTOCOMPLETE)
                           GetProcAddress((HINSTANCE)hSHlwapi, "SHAutoComplete");
    if (SHAutoCompleteAPI)
        SHAutoCompleteAPI(hEdit, SHACF_FILESYSTEM);  // hEditは適用するテキストボックスのハンドル
    FreeLibrary((HINSTANCE)hSHlwapi);
}

 この関数の引数や定数などの詳しい説明は、SHAutoComplete関数の解説をご覧ください。

 

 このバージョンでは、ファイルやURLしか指定できません。任意の文字列から選べるようにするには、 IAutoCompleteなどのインターフェイスを利用し、自分で文字列列挙用のIEnumStringを実装しなければ行けません。
記事の無断転載は禁止です。 Copyright 1999-2001 Runan. All Rights Reserved.