Accessing the menu bar of Symbian C++ dialog-based applications returns a null pointer (Known Issue)
Accessing the menu bar of Symbian C++ dialog-based applications, for example to modify menu contents at runtime, returns a null pointer if no menu bar is defined in resources.
Article Metadata
Tested with
Compatibility
S60 5th Edition
Article
Description
CEikonEnv::Static()->AppUiFactory()->MenuBar() can be used in an S60 UI application to access the menu bar (a pointer to the CEikMenuBar instance), defined in the EIK_APP_INFO resource as follows:
RESOURCE EIK_APP_INFO
{
menubar = r_myapp_menu_bar; /* a link to a MENU_BAR resource */
cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
}
A dialog-based application that omits the menubar definition will receive a null pointer when trying to access the menu bar using the above function.
Solution
Define a menu bar in the EIK_APP_INFO resource for a dialog-based application, then use the following buttons definition in the DIALOG resource:
RESOURCE DIALOG r_myapp_main_dialog
{
buttons = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
...
}
As a result, the menu bar (Options menu) can be accessed with CEikonEnv::Static()->AppUiFactory()->MenuBar().
See also
See S60 Platform: Time Zone Localiser Example for an example of a dialog-based application.

