Отображение Owner-Drawn элементов меню
Разработчики приложений могут использовать структуруMSAAMENUINFOдля предоставления имен элементов меню, нарисованных владельцем. При связывании этой структуры с данными элемента меню, нарисованного владельцем, не требуется предоставлять элементы меню с IAccessible.
При создании нарисованного владельцем меню определите класс или структуру для данных элемента меню, нарисованного владельцем, и создайте экземпляры этого класса для каждого элемента меню. Укажите указатель на данные элемента при добавлении элементов в меню.
Чтобы предоставить имена элементов меню, структура MSAAMENUINFO должна быть первым элементом структуры, определяющей данные элемента для конкретного приложения, как показано в следующем примере:
// 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
};
СтруктураMSAAMENUINFOне может быть членом класса, содержащего виртуальные функции. При компиляции кода первый член класса всегда является указателем компилятора на таблицу виртуальных функций. Чтобы обойти эту проблему, создайте структуру данных элемента, содержащую MSAAMENUINFO в качестве первого элемента. Второй элемент — это указатель на экземпляр класса, который определяет данные, нарисованные владельцем. В следующем примере показан этот метод.
// 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
}
При добавлении элементов в меню передайте указатель на экземпляр структуры, содержащей MSAAMENUINFO, чтобы предоставить имена элементов меню.