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.