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 でも構わない。