Создание обработчиков столбцов

[Эта функция поддерживается только в Windows XP или более ранней версии. ]

В представлении Сведения в Windows Обозреватель обычно отображается несколько стандартных столбцов. Каждый столбец содержит сведения о размере или типе файла для каждого файла в текущей папке. Реализуя и регистрируя обработчик столбцов, можно сделать настраиваемые столбцы доступными для отображения.

Общие процедуры реализации и регистрации обработчика расширений оболочки рассматриваются в статье Создание обработчиков расширений оболочки. В этом документе рассматриваются аспекты реализации, относящиеся к обработчикам столбцов.

Рассматриваются следующие темы.

Принцип работы обработчиков столбцов

На следующем рисунке показана Обозреватель Windows в представлении сведений.

Снимок экрана: проводник в представлении сведений

В Windows 2000 папка также может поддерживать ряд столбцов, которые по умолчанию не отображаются. Пользователь может отобразить дополнительные столбцы, щелкнув правой кнопкой мыши один из заголовков столбцов и выбрав в меню команду Дополнительно... . Откроется диалоговое окно со списком доступных столбцов для папки и позволяет пользователю выбрать столбцы для отображения. На следующем рисунке показано это диалоговое окно для предыдущего примера.

снимок экрана проводника Windows с диалоговым окном выбора сведений

Создав обработчик столбцов, вы можете создавать настраиваемые столбцы и добавлять их в этот список. Например, коллекция файлов, содержащих музыку, может использовать обработчик столбцов для отображения столбцов со списком исполнителей и фрагментов, содержащихся в каждом файле.

Обработчик столбца — это глобальный объект, который вызывается каждый раз, когда Windows Обозреватель отображает представление Сведений. Однако обработчики столбцов обычно используются для отображения настраиваемых столбцов только для членов определенного типа файлов. Перед отображением представления сведений Windows Обозреватель запрашивает все зарегистрированные обработчики столбцов для их характеристик. Если пользователь выбрал один из столбцов обработчика, Windows Обозреватель запрашивает у обработчика связанные данные. Когда обработчик столбцов получает запрос на получение данных, он предоставляет его, если файл является членом поддерживаемого типа. В противном случае запрос игнорируется, возвращая S_FALSE.

Регистрация обработчиков столбцов

Обработчики столбцов регистрируются в следующем подразделе.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers

Создайте подраздел ColumnHandlers с именем со строковой формой идентификатора класса обработчика (CLSID) GUID. Общие сведения о регистрации обработчиков расширений оболочки см. в статье Создание обработчиков расширений оболочки. В следующем примере показано, как зарегистрировать обработчик столбца.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers
            {My Column Handler CLSID GUID}

Реализация обработчиков столбцов

Как и все обработчики расширений оболочки, обработчики столбцов представляют собой внутрипроцессные объекты модели COM, реализованные в виде библиотек DLL. Они экспортируют интерфейс IColumnProvider в дополнение к IUnknown.

Windows Обозреватель вызывает три метода, экспортированные IColumnProvider, для запроса сведений, необходимых для отображения столбца. Процедура, используемая Обозреватель Windows:

  1. Вызовите метод IColumnProvider::Initialize , чтобы указать папку, которая будет отображаться.
  2. Вызовите метод IColumnProvider::GetColumnInfo , чтобы получить идентификатор и характеристики столбца.
  3. Если пользователь выбрал столбец, вызовите метод IColumnProvider::GetItemData для каждого файла в папке, чтобы получить данные, принадлежащие записи столбца файла.

Метод Initialize

Windows Обозреватель вызывает IColumnProvider::Initialize для инициализации обработчика столбца. Метод имеет три параметра, но в настоящее время используется только wszFolder . Для нее задается папка, в которой будет отображаться представление сведений. Сохраните имя папки для последующего использования и при необходимости инициализируйте объект обработчика.

Метод GetColumnInfo

Windows Обозреватель следующий вызов IColumnProvider::GetColumnInfo для запроса идентификатора и характеристик столбца. Он передает индекс для столбца в параметре dwIndex . Этот индекс является произвольным значением, которое используется для перечисления столбцов. Windows Обозреватель также передает указатель на структуру SHCOLUMNINFO. Эта структура используется для возврата идентификатора и характеристик столбца. IColumnProvider::GetColumnInfo должен назначать соответствующие значения членам структуры и возвращать.

Столбцы идентифицируются по идентификатору набора свойств OLE (FMTID) и связанному идентификатору свойства (PID). Первый элемент структуры SHCOLUMNINFO , scid, является указателем на структуру SHCOLUMNID , которая используется для идентификации столбца. Его член fmtid содержит FMTID столбца, а его член pid содержит PID столбца. Например, стандартная пара FMTID/PID, которая обычно используется для идентификации столбцов, является PID автора набора свойств Сводная информация.

Если это возможно, обработчик должен использовать существующие FMTID и PID для идентификации столбца, который он поддерживает. При использовании пользовательской структуры SHCOLUMNID в столбце будут отображаться данные только для тех файлов, которые поддерживаются обработчиком. Если папка содержит другие файлы, их записи будут пустыми. Если папка содержит файлы из нескольких типов файлов, использование стандартных значений FMTID/PID может позволить объединить данные разных типов в один столбец.

Присвойте члену vt тип VARIANT данных, которые вы хотите отобразить в столбце. Наиболее часто используемый тип — VT_LPSTR, так как большинство столбцов отображают свои данные в виде символьных строк. Остальные элементы структуры SHCOLUMNINFO используются для определения характеристик столбца. Присвойте значения соответствующим образом.

Метод GetItemData

Если выбран столбец обработчика столбцов, Windows Обозреватель вызывает IColumnProvider::GetItemData для каждого файла в отображаемой папке. Параметр pscid является указателем на структуру SHCOLUMNID , которая идентифицирует столбец. Параметр pscd указывает на структуру SHCOLUMNDATA , которая идентифицирует конкретный файл.

Параметр pvarData возвращает данные, которые должны отображаться в столбце обработчика для файла, указанного pscd. Если этот файл поддерживается обработчиком столбцов, назначьте его значение данных pvarData и верните S_OK. Если файл не поддерживается обработчиком столбцов, верните S_FALSE без назначения значения pvarData.

Многие папки будут содержать несколько файлов, которые не поддерживаются каким-либо определенным обработчиком столбцов. Для повышения эффективности IColumnProvider::GetItemData следует сначала проверка элемент pwszExt структуры, на которую указывает pscd. Этот член содержит расширение имени файла. Если расширение указывает, что файл не является членом типа файла, поддерживаемого обработчиком, избегайте ненужной обработки, немедленно возвращая S_FALSE.