(void) BuildPulldownMenu (MenuBar, "Edit", 'E', True, edit_items);
(void) BuildPulldownMenu (MenuBar, "View", 'V', True, view_items);
(void) BuildPulldownMenu (MenuBar, "Options", 'O', True, options_items);
widget = BuildPulldownMenu (MenuBar, "Help", 'H', True, help_items);
XtVaSetValues (MenuBar, XmNmenuHelpWidget, widget, NULL);
XtManageChild (MenuBar);
return MenuBar;
}
Each call to BuildPulldownMenu() passes an array of pre−initialized MenuItem structures. The Help menu is a
special case, so we set the XmNmenuHelpWidget resource to let the MenuBar know which item it is. By setting the
resource to the CascadeButton returned by the function, the MenuBar knows that this button should be placed to the
far right. The only parameter to the CreateMenuBar() function is the MainWindow widget that is the parent of the
MenuBar that is returned.
16.4.2 Building Cascading Menus
We can add pullright menus to our menu creation methodology quite easily by adding to the MenuItem data
structure and making a slight modification to the CreatePulldownMenu() function. As we learned from the
simple menu creation routines, a cascading menu is really a PulldownMenu that is associated with a CascadeButton.
We also know that we can attach a menu to a CascadeButton by setting the XmNsubMenuId resource to the handle
of the PulldownMenu. We begin by modifying the MenuItem structure as follows:
typedef struct _menu_item {
char *label; /* the label for the item */
WidgetClass *class; /* pushbutton, label, separator... ...