Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Ishodniki.Ru » Online книги » C++ Builder по шагам Шаг 79 - Shell extensions Строго говоря, я сейчас буду говорить не о всей теме расширений оболочки, а более конкретно - о функции, открывающей окно выбора папки, и списках идентификаторов. Что такое списки идентификаторов... Вообще, предполагается, что в оболочке данные, такие как имена файлов, директорий и т.д. записываются не простыми строками, а списками идентификаторов. Это довольно сложный способо хранения информации такого рода, и мне немного непонятно, к чему такие ухищрения... Но, неважно. Так вот, так как диалог открывается, первая выделенная папка, которую он отображает, и вообще выбранная папка, которую он (вернее она - функция) возвращает, находятся в указателях на списки идентфикаторов, именумых item identifier list. Для этих списков существуют функции. Которые мы естественно рассмотрим. SHBrowseForFolderФункция, открывающая диалоговое окно, довольно лаконично выглядит: WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder( LPBROWSEINFO lpbi ); Как я и предупреждал, возвращает указатель на список идентификаторов. Аргумент lpbi содержит необходимые данные. Хочу обратить Ваше внимание на некоторую систему, существующую в способах определения данных в WinAPI. Имена структур пишутся прописью (ITEMIDLIST). Простой указатель на эту структуру прибавляет P (PITEMIDLIST). Дальний указатель - LP (LPITEMIDLIST). Дальний константный указатель - LPC (LPCITEMIDLIST). BROWSEINFOНадо сказать, помимо того, что эта структура передает иформацию функции SHBrowseForFolder, функция через эту структуру еще и кое-что возвращает. Определение функции выглядит так: typedef struct _browseinfo { HWND hwndOwner; LPCITEMIDLIST pidlRoot; LPSTR pszDisplayName; LPCSTR lpszTitle; UINT ulFlags; BFFCALLBACK lpfn; LPARAM lParam; int iImage; } BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
|
Форум Программиста
Новости Обзоры Магазин Программиста Каталог ссылок Поиск Добавить файл Обратная связь Рейтинги
|