The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
The latest version of this topic can be found at Snap-In Object Macros.
These macros provide support for snap-in extensions.
| BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP | Marks the beginning of the snap-in extension data class map for a Snap-In object. | 
| BEGIN_SNAPINTOOLBARID_MAP | Marks the beginning of the toolbar map for a Snap-In object. | 
| END_EXTENSION_SNAPIN_NODEINFO_MAP | Marks the end of the snap-in extension data class map for a Snap-In object. | 
| END_SNAPINTOOLBARID_MAP | Marks the end of the toolbar map for a Snap-In object. | 
| EXTENSION_SNAPIN_DATACLASS | Creates a data member for the data class of the snap-in extension. | 
| EXTENSION_SNAPIN_NODEINFO_ENTRY | Enters a snap-in extension data class into the snap-in extension data class map of the Snap-In object. | 
| SNAPINMENUID | Declares the ID of the context menu used by the Snap-In object. | 
| SNAPINTOOLBARID_ENTRY | Enters a toolbar into the toolbar map of the Snap-In object. | 
BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP
Marks the beginning of the snap-in extension data class map.
BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP
(classname)
Parameters
classname
[in] The name of the snap-in extension data class.
Remarks
Start your snap-in extension map with the BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP macro, add entries for each of your snap-in extension data types with the EXTENSION_SNAPIN_NODEINFO_ENTRY macro, and complete the map with the END_EXTENSION_SNAPIN_NODEINFO_MAP macro.
Example
class CMyExtSnapinExtData : 
   public CSnapInItemImpl<CMyExtSnapinExtData>,
   public CMySnapinBase
{
public:
   CMyExtSnapinExtData() {}
};
class CMyExtSnapin : 
   public CComObjectRoot,
   public CSnapInObjectRoot<1, CMyExtSnapin>,
   public IComponentDataImpl<CMyExtSnapin, CMyExtSnapin>
{
public:
   CMyExtSnapin() {}
   BEGIN_COM_MAP(CMyExtSnapin)
   END_COM_MAP()
   EXTENSION_SNAPIN_DATACLASS(CMyExtSnapinExtData)
   BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP(CMyExtSnapin)
      EXTENSION_SNAPIN_NODEINFO_ENTRY(CMyExtSnapinExtData)
   END_EXTENSION_SNAPIN_NODEINFO_MAP()
};
BEGIN_SNAPINTOOLBARID_MAP
Declares the beginning of the toolbar ID map for the Snap-In object.
BEGIN_SNAPINTOOLBARID_MAP
(_class)
Parameters
_class
[in] Specifies the Snap-In object class.
Example
class CMySnapinData : 
   public CSnapInItemImpl<CMySnapinData>,
   public CMySnapinBase
{
public:
   CMySnapinData() {}
   BEGIN_SNAPINTOOLBARID_MAP(CMySnapinData)
      // IDR_MYSNAPINTOOLBAR is the resource ID of a toolbar resource.
      SNAPINTOOLBARID_ENTRY(IDR_MYSNAPINTOOLBAR)
   END_SNAPINTOOLBARID_MAP()
};
END_EXTENSION_SNAPIN_NODEINFO_MAP
Marks the end of the snap-in extension data class map.
END_EXTENSION_SNAPIN_NODEINFO_MAP
()
Remarks
Start your snap-in extension map with the BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP macro, add entries for each of your extension snap-in data types with the EXTENSION_SNAPIN_NODEINFO_ENTRY macro, and complete the map with the END_EXTENSION_SNAPIN_NODEINFO_MAP macro.
Example
See the example for BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP.
END_SNAPINTOOLBARID_MAP
Declares the end of the toolbar ID map for the Snap-In object.
END_SNAPINTOOLBARID_MAP(Â
    _class Â)
Parameters
_class
[in] Specifies the Snap-In object class.
Example
See the example for BEGIN_SNAPINTOOLBARID_MAP.
EXTENSION_SNAPIN_DATACLASS
Adds a data member to the snap-in extension data class for an ISnapInItemImpl-derived class.
EXTENSION_SNAPIN_DATACLASS(Â
    dataClass Â)
Parameters
dataClass
[in] The data class of the snap-in extension.
Remarks
This class should also be entered into a snap-in extension data class map. Start your snap-in extension data class map with the BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP macro, add entries for each of your snap-in extension data types with the EXTENSION_SNAPIN_NODEINFO_ENTRY macro, and complete the map with the END_EXTENSION_SNAPIN_NODEINFO_MAP macro.
Example
class CMyExtSnapinExtData : 
   public CSnapInItemImpl<CMyExtSnapinExtData>,
   public CMySnapinBase
{
public:
   CMyExtSnapinExtData() {}
};
class CMyExtSnapin : 
   public CComObjectRoot,
   public CSnapInObjectRoot<1, CMyExtSnapin>,
   public IComponentDataImpl<CMyExtSnapin, CMyExtSnapin>
{
public:
   CMyExtSnapin() {}
   BEGIN_COM_MAP(CMyExtSnapin)
   END_COM_MAP()
   EXTENSION_SNAPIN_DATACLASS(CMyExtSnapinExtData)
   BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP(CMyExtSnapin)
      EXTENSION_SNAPIN_NODEINFO_ENTRY(CMyExtSnapinExtData)
   END_EXTENSION_SNAPIN_NODEINFO_MAP()
};
EXTENSION_SNAPIN_NODEINFO_ENTRY
Adds a snap-in extension data class to the snap-in extension data class map.
EXTENSION_SNAPIN_NODEINFO_ENTRY(Â
    dataClass Â)
Parameters
dataClass
[in] The data class of the snap-in extension.
Remarks
Start your snap-in extension data class map with the BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP macro, add entries for each of your snap-in extension data types with the EXTENSION_SNAPIN_NODEINFO_ENTRY macro, and complete the map with the END_EXTENSION_SNAPIN_NODEINFO_MAP macro.
Example
See the example for BEGIN_EXTENSION_SNAPIN_NODEINFO_MAP.
SNAPINMENUID
Use this macro to declare the context menu resource of the Snap-In object.
SNAPINMENUID(Â
    id Â)
Parameters
id
[in] Identifies the context menu of the Snap-In object.
SNAPINTOOLBARID_ENTRY
Use this macro to enter a toolbar ID into the Snap-In object's toolbar ID map.
SNAPINTOOLBARID_ENTRY(Â
    id Â)
Parameters
id
[in] Identifies the toolbar control.
Remarks
The BEGIN_SNAPINTOOLBARID_MAP macro marks the beginning of the toolbar ID map; the END_SNAPINTOOLBARID_MAP macro marks the end.
Example
See the example for BEGIN_SNAPINTOOLBARID_MAP.