A plug-in can obtain a MenuContext to register new menu items on to 3ds Max's default menu bar or quad menus. Since 3ds Max gets its menu configuration from a file, plug-ins should only register their extensions a single time. They should also remove their menus when they exit or go out of context. To determine if the menu extensions have been registered yet, the plug-in should call IMenuManager::FindMenu() and pass the menu name. If the menu has not been registered, this call will return null. After the context is registered, it is saved in the menu file, and the next time 3ds Max starts, the call to FindMenu() will return a pointer to the menu.
Plug-ins can also register quad menu contexts to be used as places quad menus can appear in their UI. Typically this only applies if the plug-in creates its own floating window, such as UVW Unwrap. Normally, a plug-in just needs to register action items, and possibly add items to 3ds Max's main menu or default menus.
Once items have been added to menus, and new menus have been registered, they will appear in 3ds Max's menu customization dialogs. Users can then move the items around, or remove them from menus.
If a plugin wants to add menus and items to 3ds Max's existing menus, or create its own quad menu context, it should be done when 3ds Max starts. This is best done with a global utility plugin (GUP). These plug-ins have a GUP::Start(), method that is called when 3ds Max's first starts up. It is in that method that plugins should register new contexts and add menus and items.