共用方式為


屬性頁面外掛程式

您可以將屬性頁面撰寫為 KS Proxy 的外掛程式,以提供裝置屬性的使用者介面。 本主題說明如何撰寫這類外掛程式。 首先,按照 註冊 KS Proxy 外掛程式中所述註冊您的物件。

接下來,宣告篩選器的原廠範本。 Factory 範本是 C++ 類別,其中包含類別工廠的資訊。

在 DLL 中,宣告 CFactoryTemplate物件的全域陣列,DLL 中的每個篩選或 COM 元件各一個。 如果您只有一個屬性頁,請在陣列中只建立一個物件。

針對每個物件,產生 GUID 作為類別識別碼 (CLSID),並在宣告中提供條目。

陣列必須命名為g_Templates:

CFactoryTemplate g_Templates[] =
{
    {
        L"My Property Page",
        &CLSID_MyPropPage),
        CMyPropPage::CreateInstance,
        NULL,
        NULL
    },
};

您的屬性頁面應該衍生自類別 CBasePropertyPage ,而且應該覆寫 CBasePropertyPage 的數個方法:

class CMyPropPage: public CBasePropertyPage
{
public:
    // creation routine returns ptr to new prop pg as a CUnknown
    static CUnknown* CreateInstance( LPUNKNOWN piOuterUnknown, HRESULT* phResult );

    // overridden methods:
    HRESULT OnConnect( IUnknown *punk);
    HRESULT OnDisconnect();
    HRESULT OnApplyChanges();
    HRESULT OnActivate();
    HRESULT OnDeactivate();
    INT_PTR OnReceiveMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
private:
    CMyPropPage ( LPUNKNOWN piOuterUnknown );
};

若要初始化屬性頁面,裝載屬性表會呼叫 IPropertyPage::SetPageSite。 此呼叫會導致呼叫外掛程式的 OnConnect 方法。 在此呼叫時,屬性頁面已連線到過濾器,但尚未顯示。

呼叫 OnConnect 時提供的參數是 KS 代理的介面,接著可以查詢該介面以獲取 IKsPropertySet 的指標。 然後,您可以呼叫 IKsPropertySet::GetIKsPropertySet::Set 來操作驅動程式的公開屬性。

您也必須提供 CreateInstance 方法。 系統會呼叫屬性頁的方法以建立屬性頁的實例。 這個方法應該呼叫類別的建構函式來實例化它。

建構函式會接收到指向外部未知介面的指標,在此案例中為 KS Proxy。

當屬性頁面應該釋放相關聯的物件時,會呼叫屬性頁面的 OnDisconnect 方法。 此回呼應該藉由呼叫其 Release 方法,遞減 KS Proxy 介面指標上的參考計數。