您可以將屬性頁面撰寫為 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::Get 和 IKsPropertySet::Set 來操作驅動程式的公開屬性。
您也必須提供 CreateInstance 方法。 系統會呼叫屬性頁的方法以建立屬性頁的實例。 這個方法應該呼叫類別的建構函式來實例化它。
建構函式會接收到指向外部未知介面的指標,在此案例中為 KS Proxy。
當屬性頁面應該釋放相關聯的物件時,會呼叫屬性頁面的 OnDisconnect 方法。 此回呼應該藉由呼叫其 Release 方法,遞減 KS Proxy 介面指標上的參考計數。