同意 huanggx(大侠) 但是只要用窗体做成 拉框部分 就可以了,将窗体 SHOW ,OnFrm
下面的简单代码可以实现一个 IE 地址 Combo 的效果。只需配合 ImageList,就可以加图标了。通过 SendMessage 可以添加列表内容,我不啰嗦了:Option ExplicitPrivate hWndComboEx As LongPrivate Sub Form_Load() Dim initComCtrl As INITCOMMONCONTROLSEXst
With initComCtrl .dwICC = ICC_USEREX_CLASSES .dwSize = Len(initComCtrl) End With
hWndComboEx = CreateWindowEx(0&, _ WC_COMBOBOXEX, _ "", _ WS_CHILD Or WS_VISIBLE Or CBS_DROPDOWN, _ 10, _ 10, _ 300, _ 21, _ Me.hWnd, _ ByVal 0&, _ App.hInstance, _ ByVal 0&) If hWndComboEx > 0 Then SendMessageVal hWndComboEx, _ WM_SETFONT, _ SendMessageVal(hWnd, WM_GETFONT, 0&, ByVal 0&), _ ByVal &HFFFFFFFF SHAutoComplete SendMessageVal(hWndComboEx, CBEM_GETEDITCONTROL, 0&, ByVal 0&), SHACF_URLALL Or SHACF_FILESYSTEM End If End SubPrivate Sub Form_Unload(Cancel As Integer) If hWndComboEx > 0 Then DestroyWindow hWndComboEx End Sub
尤其是,如何把这个“自动完成”功能应用于任何输入控件?也就是说,做成dll?
功能不难实现,但要想把那个下拉框部分置于所有窗口之上,就不是很容易。甚至,如果输入控件所在的窗口缩小的时候,这个下拉框也不能挡住(即,下拉框要超出该窗口的边界)我曾经做成过这个功能。要用一些API才可以。
但是只要用窗体做成 拉框部分 就可以了,将窗体 SHOW ,OnFrm
Dim initComCtrl As INITCOMMONCONTROLSEXst
With initComCtrl
.dwICC = ICC_USEREX_CLASSES
.dwSize = Len(initComCtrl)
End With
hWndComboEx = CreateWindowEx(0&, _
WC_COMBOBOXEX, _
"", _
WS_CHILD Or WS_VISIBLE Or CBS_DROPDOWN, _
10, _
10, _
300, _
21, _
Me.hWnd, _
ByVal 0&, _
App.hInstance, _
ByVal 0&) If hWndComboEx > 0 Then
SendMessageVal hWndComboEx, _
WM_SETFONT, _
SendMessageVal(hWnd, WM_GETFONT, 0&, ByVal 0&), _
ByVal &HFFFFFFFF
SHAutoComplete SendMessageVal(hWndComboEx, CBEM_GETEDITCONTROL, 0&, ByVal 0&), SHACF_URLALL Or SHACF_FILESYSTEM
End If
End SubPrivate Sub Form_Unload(Cancel As Integer)
If hWndComboEx > 0 Then DestroyWindow hWndComboEx
End Sub