Bagikan melalui


Mengekspos Item Menu Owner-Drawn

Pengembang aplikasi dapat menggunakan struktur MSAAMENUINFO untuk mengekspos nama item menu yang digambar pemilik. Dengan mengaitkan struktur ini dengan data item menu yang digambar pemilik, Anda tidak perlu mengekspos item menu dengan IAccessible.

Saat membuat menu yang digambar pemilik, tentukan kelas atau struktur untuk data item menu yang digambar pemilik dan buat instans kelas ini untuk setiap item menu. Teruskan penunjuk ke data item saat menambahkan item ke menu.

Untuk mengekspos nama item menu, struktur MSAAMENUINFO harus menjadi anggota pertama struktur yang menentukan data item khusus aplikasi, seperti yang ditunjukkan dalam contoh berikut:

// Application-specific owner-drawn menu info struct. Owner-drawn data 
// is a pointer to one of these.
struct MenuEntry
{
    MSAAMENUINFO m_MSAA;       // MSAA info - must be first member
    LPTSTR       m_pName;      // Displayed menu text or NULL for 
                               //   separator item 
    int          m_CmdID;      // Menu command ID 
    int          m_IconIndex;  // Index of icon in bitmap or -1 for
                               //   for separator 
};

Struktur MSAAMENUINFO tidak dapat menjadi anggota di kelas yang berisi fungsi virtual. Ketika kode dikompilasi, anggota pertama kelas selalu merupakan penunjuk yang dihasilkan kompilator ke tabel fungsi virtual. Untuk mengatasi masalah ini, buat struktur data item yang berisi MSAAMENUINFO sebagai anggota pertama. Anggota kedua adalah penunjuk ke instans kelas yang menentukan data yang digambar pemilik. Contoh berikut menunjukkan teknik ini.

// Application-defined class that contains the owner-drawn data and 
//  virtual functions that operate on that data.  
class MenuEntry
{
    LPTSTR       m_pName;      // Displayed menu text or NULL for 
                               //  separator item. 
    int          m_CmdID;      // Menu command ID 
    int          m_IconIndex;  // Index of icon in bitmap or -1 for
                               //  separator item 
    virtual void m_AnimateIcon();  
    virtual void m_ChangeIconColor();
}

// Application-defined struct that contains MSAAMENUINFO as first 
//  member. Second member points to owner-drawn data. 
struct MenuInfo
{
    MSAAMENUINFO m_MSAA;       // MSAA info - must be first member
    MenuEntry *pMenuData;      // Points to the owner-drawn data 
}

Saat menambahkan item ke menu, teruskan penunjuk ke instans struktur yang berisi MSAAMENUINFO untuk mengekspos nama item menu.