Отображение страниц свойств фильтра
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Страница свойств — это один из способов фильтрации для поддержки свойств, которые может задать пользователь. В этой статье описывается, как отобразить страницы свойств фильтра в приложении. Дополнительные сведения о страницах свойств см. в документации по пакету SDK для платформы.
Примечание
Хотя многие фильтры, предоставляемые с DirectShow, поддерживают страницы свойств, они предназначены для отладки и не рекомендуются для использования приложениями. В большинстве случаев эквивалентные функциональные возможности предоставляются через пользовательский интерфейс фильтра. Приложение должно управлять этими фильтрами программным способом, а не предоставлять пользователям страницы свойств.
Фильтры со страницами свойств предоставляют интерфейс ISpecifyPropertyPages . Чтобы определить, определяет ли фильтр страницу свойств, запросите фильтр для этого интерфейса с помощью QueryInterface.
Если вы непосредственно создали экземпляр фильтра (путем вызова CoCreateInstance), у вас уже есть указатель на фильтр. В противном случае можно перечислить фильтры в графе с помощью метода IFilterGraph::EnumFilters . Дополнительные сведения см. в разделе Перечисление объектов в графе фильтров.
Получив указатель интерфейса ISpecifyPropertyPages , получите страницы свойств фильтра, вызвав метод ISpecifyPropertyPages::GetPages . Этот метод заполняет подсчитаемый массив глобальных уникальных идентификаторов (GUID) идентификатором класса (CLSID) каждой страницы свойств. Подсчитываемый массив определяется структурой CAUUID , которую необходимо выделить, но не инициализировать. Метод GetPages выделяет массив, содержащийся в элементе pElems структуры CAUUID . По завершении освободите массив, вызвав функцию CoTaskMemFree .
Функция OleCreatePropertyFrame предоставляет простой способ отображения страниц свойств в модальном диалоговом окне.
IBaseFilter *pFilter;
/* Obtain the filter's IBaseFilter interface. (Not shown) */
ISpecifyPropertyPages *pProp;
HRESULT hr = pFilter->QueryInterface(IID_ISpecifyPropertyPages, (void **)&pProp);
if (SUCCEEDED(hr))
{
// Get the filter's name and IUnknown pointer.
FILTER_INFO FilterInfo;
hr = pFilter->QueryFilterInfo(&FilterInfo);
IUnknown *pFilterUnk;
pFilter->QueryInterface(IID_IUnknown, (void **)&pFilterUnk);
// Show the page.
CAUUID caGUID;
pProp->GetPages(&caGUID);
pProp->Release();
OleCreatePropertyFrame(
hWnd, // Parent window
0, 0, // Reserved
FilterInfo.achName, // Caption for the dialog box
1, // Number of objects (just the filter)
&pFilterUnk, // Array of object pointers.
caGUID.cElems, // Number of property pages
caGUID.pElems, // Array of property page CLSIDs
0, // Locale identifier
0, NULL // Reserved
);
// Clean up.
pFilterUnk->Release();
FilterInfo.pGraph->Release();
CoTaskMemFree(caGUID.pElems);
}
Связанные темы