Özellik sayfası eklentisi

KS proxy'si için eklenti olarak bir özellik sayfası yazarak cihaz özelliklerine kullanıcı arabirimi sağlayabilirsiniz. Bu konuda, böyle bir eklentinin nasıl yazılması açıklanır. İlk olarak, KS Proxy Eklentilerini Kaydetme bölümünde açıklandığı gibi nesnenizi kaydedin.

Ardından, filtreniz için fabrika şablonunu bildirin. Fabrika şablonu, sınıf fabrikasına ilişkin bilgileri içeren bir C++ sınıfıdır.

DLL'nizde, DLL'nizdeki her filtre veya COM bileşeni için bir tane olmak üzere CFactoryTemplatenesnelerinin genel dizisini bildirin. Yalnızca bir özellik sayfanız varsa, dizide yalnızca bir nesne oluşturun.

Her nesne için sınıf tanımlayıcısı (CLSID) için bir GUID oluşturun ve bildirimde bir giriş sağlayın.

Dizi g_Templates olarak adlandırılmalıdır:

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

Özellik sayfanız CBasePropertyPage sınıfından türetilmelidir ve CBasePropertyPage yöntemlerinin birkaçını geçersiz kılmalıdır:

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 );
};

Özellik sayfasını başlatmak için barındırma özellik sayfası IPropertyPage::SetPageSite'yi çağırır. Bu çağrı, eklentinin OnConnect yönteminin çağrısını döndürür. Bu çağrı sırasında, özellik sayfası filtreye bağlanmıştır, ancak özellik sayfası henüz görüntülenmemiştir.

OnConnect çağrısında sağlanan parametre, KS ara sunucusu arabirimi olup daha sonra IKsPropertySet işaretçisi için sorgulanabilir. Ardından, sürücünün kullanıma sunulan özelliklerini işlemek için IKsPropertySet::Get ve IKsPropertySet::Set çağrısı yapabilirsiniz.

Ayrıca bir CreateInstance yöntemi de sağlamanız gerekir. Sistem, özellik sayfasının bir örneğini oluşturmak için özellik sayfasının yöntemini çağırır. Bu yöntem, sınıfınızın yapıcısını çağırarak onun bir örneğini oluşturmalıdır.

Oluşturucu, dış bilinmeyen arabirime yönelik bir işaretçi alır ve bu durumda KS proxy'si olur.

Özellik sayfasının ilişkili nesneyi serbest bırakması gerektiğinde özellik sayfasının OnDisconnect yöntemi çağrılır. Bu geri çağırma, KS ara sunucusu arabirimine yönelik işaretçideki başvuru sayısını Release yöntemini çağırarak azaltmalıdır.