共用方式為


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