BMenuBar¶
A BMenuBar
is a menu that can stand at the root of a menu
hierarchy. Rather than appear on-screen when commanded to do so by a user
action, a BMenuBar
object has a settled location in a window’s
view hierarchy, just like other views. Typically, the root menu is the menu
bar that’s drawn across the top of the window. It’s from this use that the
class gets its name.
However, instances of this class can also be used in other ways. A
BMenuBar
might simply display a list of items arranged in a
column somewhere in a window. Or it might contain just one item, where that
item controls a pop-up menu (a BPopUpMenu
object). Rather than
look like a “menu bar,” the BMenuBar
object would look
something like a button.
The Key Menu Bar¶
The “real” menu bar at the top of the window usually represents an extensive menu hierarchy; each of its items typically controls a submenu.
The user should be able to operate this menu bar from the keyboard (using
the arrow keys and Enter). There are two ways that the user can put the
BMenuBar
and its hierarchy in focus for keyboard events:
Clicking an item in the menu bar. If the “click to open” preference is not turned off, this opens the submenu the item controls so that it stays visible on-screen and puts the submenu in focus.
Pressing the Menu key or Command+Escape. This puts the
BMenuBar
in focus and selects its first item.
Either method opens the entire menu hierarchy to keyboard navigation.
If a window’s view hierarchy includes more than one BMenuBar
object, the Menu key (or Command+Escape) must
choose one of them to put in focus. By default, it picks the last one that
was attached to the window. However, the
SetKeyMenuBar()
function defined in the
BWindow
class can be called to designate a different
BMenuBar
object as the “key” menu bar for the window.
A Kind of BMenu¶
BMenuBar
inherits most of its functions from the
BMenu
class. It reimplements the
AttachedToWindow()
, Draw()
,
and MouseDown()
, functions that set up the object
and respond to messages, but these aren’t functions that you’d call from
application code; they’re called for you.
The only real function (other than the constructor) that the
BMenuBar
class adds to those it inherits is
SetBorder()
, which determines how the list of items
is bordered.
Therefore, for most BMenuBar
operations—adding submenus,
finding items, temporarily disabling the menu bar, and so on—you must call
inherited functions and treat the object like the BMenu
that
it is.