URL のオートコンプリート

Internet Explorer などで使われている、エディットボックスのオートコンプリート機能を利用する方法を紹介する。ここでは、URL に絞って説明する。

エディットボックスの URL オートコンプリートを有効にする

SHAutoComplete を呼び出すだけで OK。ダイアログボックス上のエディットコントロール (IDC_EDIT1) ならば、次のようなコードをセットすればよい。

SHAutoComplete ( GetDlgItem ( hDlg, IDC_EDIT1), SHACF_URLALL);

尚、これを呼び出すスレッドで CoInitialize を呼び出しておかなければ、SHAutoComplete は失敗する。また、フラグを SHACF_URLALL から変更することで、オートコンプリートに利用できる文字列が変わる。詳細については MSDN ドキュメントを参考にしてほしい。

URL 履歴の追加

URL のオートコンプリートを行いたいエディットボックスは、URL を入力する状況が多いだろう。その場合に備え、任意の文字列を URL 履歴に追加する方法を補足しておく。

CLSID_CUrlHistory の IUrlHistoryStg::AddUrl を経由して、シェルの URL 履歴に任意の URL を追加することができる。逆に言うと、これをしないと たとえば WinInet 等を使っていくら URL を要求しても履歴には追加されない。従って、オートコンプリートにも反映されない。SHAutoComplete とこの方法を組み合わせることで、任意のエディットボックスで入力した URL を次回のオートコンプリートに反映させることが可能となる。

    #include <UrlHist.h>

    ....

    IUrlHistoryStg* pUrlHistoryStg = NULL;
    HRESULT hr = CoCreateInstance (CLSID_CUrlHistory, NULL, CLSCTX_INPROC, IID_IUrlHistoryStg, (void**)&pUrlHistoryStg);
    if ( SUCCEEDED(hr) ) {
        pUrlHistoryStg->AddUrl ( wszURL, wszTitle, 0);
        pUrlHistoryStg->Release();
        pUrlHistoryStg = NULL;
    }

ここで wszURL, wszTitle は共にワイドキャラクタの文字列であり、それぞれ URL とタイトルをあらわす。URL は当然指定するだろうが、タイトルは NULL でも構わない。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説