Sdílet prostřednictvím


Odhalení položek nabídky Owner-Drawn

Vývojáři aplikací můžou pomocí struktury MSAAMENUINFO zveřejnit názvy položek nabídek nakreslených vlastníkem. Přidružením této struktury k datům položek nabídky kreslených vlastníkem nemusíte položky nabídky zpřístupnit pomocí IAccessible.

Při vytváření nabídky nakreslené vlastníkem definujte třídu nebo strukturu pro data položek nabídky nakreslených vlastníkem a vytvořte instance této třídy pro každou položku nabídky. Při přidávání položek do nabídky předejte ukazatel na data položky.

Chcete-li zveřejnit názvy položek nabídky, MSAAMENUINFO struktura musí být prvním členem struktury, která definuje data položky specifické pro aplikaci, jak je znázorněno v následujícím příkladu:

// 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 
};

Struktura MSAAMENUINFO nemůže být členem třídy, která obsahuje virtuální funkce. Při kompilaci kódu je prvním členem třídy vždy ukazatel vygenerovaný kompilátorem na tabulku virtuálních funkcí. Chcete-li tento problém vyřešit, vytvořte datovou strukturu položky, která obsahuje MSAAMENUINFO jako první člen. Druhý člen je ukazatel na instanci třídy, která definuje vlastníkem vykreslená data. Následující příklad ukazuje tuto techniku.

// 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 
}

Při přidávání položek do nabídky předejte ukazatel na instanci struktury, která obsahuje MSAAMENUINFO, aby se zobrazily názvy položek nabídky.