Esposizione di voci di menu Owner-Drawn
Gli sviluppatori di applicazioni possono usare la struttura MSAAMENUINFO per esporre i nomi delle voci di menu disegnate dal proprietario. Associando questa struttura ai dati delle voci di menu disegnate dal proprietario, non è necessario esporre le voci di menu con IAccessible.
Quando si crea un menu disegnato dal proprietario, definire una classe o una struttura per i dati delle voci di menu disegnate dal proprietario e creare istanze di questa classe per ogni voce di menu. Passare un puntatore ai dati dell'elemento quando si aggiungono elementi al menu.
Per esporre i nomi delle voci di menu, la struttura MSAAMENUINFO deve essere il primo membro della struttura che definisce i dati dell'elemento specifico dell'applicazione, come illustrato nell'esempio seguente:
// 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
};
La struttura MSAAMENUINFO non può essere un membro di una classe che contiene funzioni virtuali. Quando il codice viene compilato, il primo membro della classe è sempre un puntatore generato dal compilatore a una tabella delle funzioni virtuali. Per risolvere questo problema, creare una struttura di dati dell'elemento contenente MSAAMENUINFO come primo membro. Il secondo membro è un puntatore a un'istanza della classe che definisce i dati disegnati dal proprietario. Nell'esempio seguente viene illustrata questa tecnica.
// 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
}
Quando si aggiungono elementi al menu, passare un puntatore a un'istanza della struttura che contiene MSAAMENUINFO per esporre i nomi delle voci di menu.