Verfügbarmachen Owner-Drawn Menüelemente
Anwendungsentwickler können die MSAAMENUINFO-Struktur verwenden, um die Namen der vom Besitzer gezeichneten Menüelemente verfügbar zu machen. Durch Zuordnen dieser Struktur mit den daten des vom Besitzer gezeichneten Menüelements müssen Sie die Menüelemente nicht mit IAccessible verfügbar machen.
Wenn Sie ein vom Besitzer gezeichnetes Menü erstellen, definieren Sie eine Klasse oder Struktur für die Daten des vom Besitzer gezeichneten Menüelements, und erstellen Sie Instanzen dieser Klasse für jedes Menüelement. Übergeben Sie beim Hinzufügen von Elementen zum Menü einen Zeiger auf die Elementdaten.
Um die Namen der Menüelemente verfügbar zu machen, muss die MSAAMENUINFO-Struktur das erste Element der Struktur sein, die die anwendungsspezifischen Elementdaten definiert, wie im folgenden Beispiel gezeigt:
// 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
};
Die MSAAMENUINFO-Struktur darf kein Member in einer Klasse sein, die virtuelle Funktionen enthält. Wenn der Code kompiliert wird, ist das erste Element der Klasse immer ein vom Compiler generierter Zeiger auf eine Tabelle der virtuellen Funktionen. Um dieses Problem zu umgehen, erstellen Sie eine Elementdatenstruktur, die MSAAMENUINFO als erstes Element enthält. Das zweite Element ist ein Zeiger auf eine instance der -Klasse, die die vom Besitzer gezeichneten Daten definiert. Im folgenden Beispiel wird diese Technik veranschaulicht.
// 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
}
Übergeben Sie beim Hinzufügen von Elementen zum Menü einen Zeiger an eine instance der Struktur, die MSAAMENUINFO enthält, um die Namen der Menüelemente verfügbar zu machen.