15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Ниспадающее меню с локальными дисками

Иногда требуется, чтобы приложение демонстрировало все диски, имеющиеся на компьютере. Это бывыет надо при написании, например, инсталяторов. Приведенный здесь код показывает как это сделать.

Итак, класс CDrvListBox - это ниспадающее меню, которое показывает все диски на нашем компьтере, включая имена и иконки, соответствующие им. CDrvListBox наследован от CComboBoxEx и позволяет использовать большие и маленькие иконки, как это делает Explorer. Используйте его вместо CComboBoxEx и введите LoadItems() в OnInitDialog() родительского окна. По умолчанию показываютя маленькие иконки, но Вы можете их сделать большими передав TRUE LoadItems(), но это также автоматически увеличит размер Вашего элемента. GetDataPtr() вернет указвтель на стоку, содержащую корневой каталог диска.

Реализация этого метода достаточно проста:

  • GetLogicalDriveStrings дает нам корневые каталоги для всех дисков известных системе
  • SHGetFileInfo - когда даны вернные параметры - дает нам имена и индексы в системном списке имен
  • Использование CComboBoxEx.InsertItem() дает простое заполнение такое как в CListView элементе
  • В конце концов связываем системный список изображений с наши элементов

 

Код класса CDrvListBox находится в zip-архиве , пример того что получится.


 

Источник: ProtoSphere