屬性頁外掛程式
您可以將屬性頁寫入為 KS Proxy 外掛程式,以提供裝置屬性的使用者介面。 本主題說明如何撰寫這類外掛程式。 首先,註冊物件,如 註冊 KS Proxy 外掛程式中所述。
接下來,宣告篩選準則的 Factory 範本。 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 Proxy 的介面,接著可以查詢IKsPropertySet的指標。 然後,您可以呼叫 IKsPropertySet::Get 和 IKsPropertySet::Set ,以操作驅動程式的公開屬性。
您也必須提供 CreateInstance 方法。 系統會叫用屬性頁的 方法來建立屬性頁的實例。 這個方法應該呼叫 類別的建構函式來具現化它。
建構函式會接收外部未知介面的指標,在此案例中為 KS Proxy。
當屬性頁應該釋放相關聯的物件時,會呼叫屬性頁的 OnDisconnect 方法。 此回呼應該藉由呼叫其 Release 方法,將介面指標上的參考計數遞減至 KS Proxy。