The following sample contains a menu bar with only one submenu named Alignment. When you run the sample and select Alignment, the pull-down menu is displayed. The choices in the pull-down menu are Left, Center, and Right. When you select one of the choices, the text string in the client window aligns to the selected position and a check mark appears beside the selected item.
WND_MAIN MENUEX BEGIN POPUP "&Alignment" , MI_ALIGNMENT BEGIN MENUITEM "&Left" , MI_LEFT MENUITEM "&Center" , MI_CENTER MENUITEM "&Right" , MI_RIGHT END END
The resource file for the OS/2 platform would be as follows:
MENU WND_MAIN //Main window menu bar BEGIN SUBMENU "~Alignment", MI_ALIGNMENT //Alignment submenu BEGIN MENUITEM "~Left", MI_LEFT //Left menu item - F7 Key MENUITEM "~Center", MI_CENTER //Center menu item - F8 Key MENUITEM "~Right", MI_RIGHT //Right menu item - F9 Key END END
To assist keyboard users of your application, underline the mnemonic in each menu item. For Windows, use the ampersand (&) and for OS/2, use the tilde (~).
The following code, from the ahellow3.hpp file, shows the AHelloWindow class containing an ACommandHandler object, which is derived from the ICommandHandler class:
private: IMenuBar menuBar; IStaticText statusLine; IStaticText hello; IInfoArea infoArea; ACommandHandler commandHandler; }; #endif
The following code creates the mainWindow object from the AHelloWindow class:
AHelloWindow mainWindow (WND_MAIN);
This code shows the first part of the AHelloWindow constructor. The menu bar defined in the resource file is associated with this AHelloWindow object.
AHelloWindow :: AHelloWindow(unsigned long windowId) : IFrameWindow(IFrameWindow::defaultStyle() | IFrameWindow::minimizedIcon, windowId) ,menuBar(WND_MAIN, this) ,statusLine(WND_STATUS, this, this) ,hello(WND_HELLO, this, this) ,infoArea(this) ,commandHandler(this) {
The following code attaches the command handler to the frame window:
commandHandler.handleEventsFor(this);
When the user selects a menu item, the ACommandHandler::command function is called to select the appropriate frame window function to call as follows:
switch (cmdEvent.commandId()) { case MI_CENTER: frame->setTextAlignment(AHelloWindow::center); break;
This code from the AHelloWindow::setAlignment function places the check mark beside the appropriate menu item:
case center: hello.setAlignment( IStaticText::centerCenter); statusLine.setText(STR_CENTER); menuBar.checkItem(MI_CENTER); menuBar.uncheckItem(MI_LEFT); menuBar.uncheckItem(MI_RIGHT); break;
Creating a Frame Window
Adding Menus to your Application
IMenu
IMenuBar
IPopUpMenu
ISubMenu
ISystemMenu
IWindow