公开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 的 结构的实例的指针,以公开菜单项的名称。