公開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 之結構的實例,以公開功能表項目的名稱。