それはきっとオートコンプリートのことだと思います。
ファイルとフォルダのパスやURLをオートコンプリートで表示させたいのなら,
お手軽なことにその名もずばりSHAutoComplete関数を呼ぶだけでできます。(ただし要IE5以上ですが)
オートコンプリートはエディットコントロールに対して機能するので,まずはRADでウィンドウ内にエディットコントロールを置いてください。
(以下MainWnd上にIDをEditBox1にして設置したとして話を進めます)
そうしたらCreateイベント内で次のようにSHAutoComplete関数を呼びます。(IE5以上がない環境でも動くように動的リンクしています)
コード: 全て選択
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
If SUCCEEDED(CoInitialize(0)) Then
Dim hinstShLwApi As HINSTANCE
hinstShLwApi = LoadLibrary("shlwapi.dll") As HINSTANCE
If hinstShLwApi <> 0 Then
Dim pfnSHAutoComplete As SHAutoComplete_Type
pfnSHAutoComplete = GetProcAddress(hinstShLwApi, "SHAutoComplete") As SHAutoComplete_Type
If pfnSHAutoComplete <> 0 Then
pfnSHAutoComplete(GetDlgItem(hMainWnd, EditBox1), SHACF_DEFAULT)
End If
End If
FreeLibrary(hinstShLwApi As HINSTANCE)
End If
End Sub
さてCoInitialize関数を呼んだらプログラム(正確にはスレッド)の終了時にはCoUninitialize関数を呼ばなくてはなりません。
通常はDestroyイベントで呼べばいいのですが,今回はそうも行きません。
なぜならSHAutoCompleteを呼んだあとにCoUninitializeを呼ぶのは,
対象となったエディットコントロールが破棄された(WM_DESTROYが呼ばれた)後でないといけないとなっているからです。
Destroyイベントではまだ子ウィンドウは生きています。つまり破棄されていません。
そこでどうするかというとWM_NCDESTROYメッセージを使います。
これは子ウィンドウが破棄されて本当の最後に呼ばれるメッセージです。
というわけでMainWndProcを次のように書き換えます。
コード: 全て選択
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
Select Case dwMsg
Case WM_NCDESTROY
CoUninitialize()
Case Else
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Select
End Function
最後に今回使う宣言類です。
「TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。」のあたりにでも置いてください。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
TypeDef HRESULT = Long
Const SUCCEEDED(hrStatus) = (hrStatus As HRESULT >= 0)
Const SHACF_DEFAULT = &h00000000
Const SHACF_FILESYSTEM = &h00000001
Const SHACF_URLHISTORY = &h00000002
Const SHACF_URLMRU = &h00000004
Const SHACF_USETAB = &h00000008
Const SHACF_FILESYS_ONLY = &h00000010
Const SHACF_URLALL = SHACF_URLHISTORY Or SHACF_URLMRU
Const SHACF_AUTOSUGGEST_FORCE_ON = &h10000000
Const SHACF_AUTOSUGGEST_FORCE_OFF = &h20000000
Const SHACF_AUTOAPPEND_FORCE_ON = &h40000000
Const SHACF_AUTOAPPEND_FORCE_OFF = &h80000000
TypeDef SHAutoComplete_Type = *Function(hwndEdit As HWND, dwFlags As DWORD) As HRESULT