[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、IMFMediaEngine和媒體基金會中的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
屬性頁是篩選支援用戶可以設定之屬性的其中一種方式。 本文說明如何在應用程式中顯示篩選的屬性頁。 如需屬性頁的詳細資訊,請參閱 Platform SDK 檔。
注意
雖然 DirectShow 支援屬性頁所提供的許多篩選,但僅供偵錯之用,不建議用於應用程式使用。 在大部分情況下,對等功能是透過篩選上的自定義介面來提供。 應用程式應該以程式設計方式控制這些篩選,而不是向使用者公開其屬性頁。
具有屬性頁的過濾器會公開 ISpecifyPropertyPages 介面。 若要判斷篩選是否定義屬性頁,請使用 QueryInterface查詢此介面的篩選。
如果您直接建立篩選的實例(藉由呼叫 CoCreateInstance),您就已經有篩選的指標。 如果沒有,您可以使用 IFilterGraph::EnumFilters 方法來列舉圖表中的篩選。 如需詳細資訊,請參閱 列舉 Filter Graph中的物件。
一旦取得 ISpecifyPropertyPages 介面指標後,請呼叫 ISpecifyPropertyPages::GetPages 方法來取得篩選的屬性頁。 這個方法會將每個屬性頁的類別識別碼(CLSID)填入到一個包含全域唯一識別元(GUID)的計數陣列中。 計數陣列是由 CAUUID 結構所定義,您必須分配,但不需要初始化。 GetPages 方法會配置陣列,此陣列包含在 CAUUID 結構的 pElems 成員中。 完成時,請呼叫 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);
}
相關主題