In order to have a functional start menu and explorer menu bar we need to implement the following classes: CMenuBand, CMenuDeskBar, CStartMenu, CMenuSite.
CMenuBand is responsible for managing one or two toolbar controls styled so that they look and behave like a standard menu. It has the ability to populate the toolbar with the contents of an HMENU, an IShellFolder, or both. In the case of IShellFolder it has the ability to allow drag and drop menu items and also to show context menus for menu items.
CMenuSite manages a window that hosts one and only one CMenuBand, meant for hosting the start menu, or a submenu of either the start menu or a menubar.
CMenuDeskBar manages the top level window that hosts the CMenuSite and is essential in order to display popup menus, including the start menu.
CStartMenu is a "virtual" constructor that creates a CMenuDeskBar, a CMenuSite and a CMenuBand, and puts each one inside the previous.