Из всего перечисленного реально можно использовать лишь функцию
SHAutoComplete из-за её простоты. Но её применение ограничено именами файлов и строками URL. От использования интерфейсов типа IAutoComplete лучше отказаться сразу, чтобы долго не мучиться с имплементацией интерфейсов. Одно дело, если у тебя всего один такой Edit в приложении, а другое дело, когда на форме может быть несколько таких Edit'ов и у каждого свой список строк.
К тому же могут возникнуть проблемы со скоростью работы данных интерфейсов. Если в списке всего несколько сотен строк, то это не так заметно будет, а если количество строк измеряется десятками тысяч (к примеру, справочник из базы данных), то замедление может оказаться весьма ощутимым. Для примера, попробуй в обычный ComboBox записать 100 тысяч строк и посмотри сколько времени это занимает. Когда в окне приложения несколько таких полей со списками, то их загрузка превращается в серьёзный тормоз...
Я когда-то уже сталкивался с подобной проблемой и в результате у меня появилось своё фирменное решение.
Мне пришлось отказаться от СОМ-интерфейсов, а использовать обычный субкласс на платформе MFC. В итоге у меня получился элемент с выпадающим списком, по виду как обычный ComboBox, но скорость загрузки данных в него на порядок выше, чем у стандартного ComboBox'a. При наборе строки в поле Edit, происходит поиск соответствующей строки в выпадающем списке и автоматическое добавление остальной части текста из подходящей строки. Добавление и удаление строк в список происходит как в обычном ComboBox'e (AddString, DeleteString).
Если выпадающий список статический (т.е он не изменяется в процессе работы приложения), то его легко можно загружать из ресурсов приложения.
В прилагаемом примере демонстрируется работа данного элемента...
http://winmain.epage.ru/QCombo/info.html