Plug-in untuk halaman properti

Anda dapat menyediakan antarmuka pengguna ke properti perangkat dengan menulis halaman properti sebagai plug-in untuk proksi KS. Topik ini menjelaskan cara menulis plug-in seperti itu. Pertama, daftarkan objek Anda seperti yang dijelaskan dalam Mendaftarkan Plug-in Proksi KS.

Selanjutnya, deklarasikan templat pabrik untuk filter Anda. Templat pabrik adalah kelas C++ yang berisi informasi untuk kelas pabrik.

Di DLL Anda, deklarasikan array global objek CFactoryTemplate, satu untuk setiap filter atau komponen COM di DLL Anda. Jika Anda hanya memiliki satu halaman properti, buat hanya satu objek dalam array.

Untuk setiap objek, buat GUID untuk pengidentifikasi kelas (CLSID) dan berikan entri dalam deklarasi.

Array harus diberi nama g_Templates:

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

Halaman properti Anda harus berasal dari kelas CBasePropertyPage dan harus mengambil alih beberapa metode 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 );
};

Untuk menginisialisasi halaman properti, lembar properti hosting memanggil IPropertyPage::SetPageSite. Panggilan ini menghasilkan pemanggilan metode OnConnect dari plug-in. Pada saat panggilan ini, halaman properti telah tersambung ke filter, tetapi halaman properti belum ditampilkan.

Parameter yang disediakan dalam panggilan ke OnConnect adalah antarmuka ke proksi KS, yang kemudian dapat dikueri untuk pointer ke IKsPropertySet. Anda kemudian dapat memanggil IKsPropertySet::Get dan IKsPropertySet::Set untuk memanipulasi properti driver yang terekspos.

Anda juga harus menyediakan metode CreateInstance . Sistem memanggil metode pada halaman properti untuk membuat sebuah instance dari halaman properti. Metode ini harus memanggil konstruktor kelas Anda untuk membuat instansnya.

Konstruktor menerima penunjuk ke antarmuka luar yang tidak diketahui, yang dalam hal ini adalah proksi KS.

Metode OnDisconnect halaman properti dipanggil ketika halaman properti harus merilis objek terkait. Panggilan balik ini harus mengurangi jumlah referensi pada penunjuk antarmuka ke proksi KS dengan memanggil metode Release.