VST 3 Interfaces  VST 3.6.14
SDK for developing VST Plug-in
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Groups Pages
Context Menu Support

Extended Host callback interface IComponentHandler3 for an edit controller.

  • [host imp]
  • [extends IComponentHandler]
  • [released: 3.5.0]
  • [optional]

A Plug-in can ask the host to create a context menu for a given exported Parameter ID or a generic context menu.
The host may pre-fill this context menu with specific items regarding the parameter ID like "Show automation for parameter", "MIDI learn" etc...
The Plug-in can use the context menu in two ways :

  • add its own items to the menu via the IContextMenu interface and call IContextMenu::popup(..) to pop-up it. See the Example.
  • extract the host menu items and add them to its own created context menu

Note: You can and should use this even if you don't add your own items to the menu as this is considered to be a big user value.

See also


Adding Plug-in specific items to the context menu

class PluginContextMenuTarget : public IContextMenuTarget, public FObject
PluginContextMenuTarget () {}
virtual tresult PLUGIN_API executeMenuItem (int32 tag)
// this will be called if the user has executed one of the menu items of the Plug-in.
// It won't be called for items of the host.
switch (tag)
case 1: break;
case 2: break;
return kResultTrue;
OBJ_METHODS(PluginContextMenuTarget, FObject)
DEF_INTERFACE (IContextMenuTarget)
// The following is the code to create the context menu
void popupContextMenu (IComponentHandler* componentHandler, IPlugView* view, const ParamID* paramID, UCoord x, UCoord y)
if (componentHandler == 0 || view == 0)
FUnknownPtr<IComponentHandler3> handler (componentHandler);
if (handler == 0)
IContextMenu* menu = handler->createContextMenu (view, paramID);
if (menu)
// here you can add your entries (optional)
PluginContextMenuTarget* target = new PluginContextMenuTarget ();
IContextMenu::Item item = {0};
UString128 ("My Item 1").copyTo (item.name, 128);
item.tag = 1;
menu->addItem (item, target);
UString128 ("My Item 2").copyTo (item.name, 128);
item.tag = 2;
menu->addItem (item, target);
target->release ();
//--end of adding new entries
// here the the context menu will be pop-up (and it waits a user interaction)
menu->popup (x, y);
menu->release ();

Back to Contents


Copyright ©2019 Steinberg Media Technologies GmbH. All Rights Reserved. This documentation is under this license.