| | | | Browse by category |
Adding menu items dynamically to an already existing menu created by zFactory.
Cause
This is because the .rc file attaches IDs to sub-menu items, not the DropDown itself. So you can not simply say get(ID) to get a handle to the submenu item.
Action
//============================================================================
// Adding a new menu item dynamically.
// This adds The Other item between Edit|Cut and Edit|Paste as a test.
// The new item is added when menu item Change|AddItem is selected.
// The new item even has a working event handler associated with it.
//============================================================================
// In HPP file
class WMain : public zMDIAppFrame {
...
// zpb_begin WMainClass
int cmdEditTheOther(zCommandEvt* ev); //<======== new event handler
// zpb_end
};
//============================================================================
// In CPP file
// (Starting with factory generated code for menu item Change|Additem).
int WMain::cmdChangeAddItem(zCommandEvt* ev) {
// zpb_begin WMainChangeAddItem
//=== The next 3 lines are Win32 API.
HMENU hMenu = GetMenu( *this );
HMENU hSubMenu = GetSubMenu( hMenu, 1 );
InsertMenu( hSubMenu, 2, MF_BYPOSITION, IDM_KENTHEOTHER,
(char*)zString(zResId(IDM_KENTHEOTHER)) );
menu()->setCommand(this, (CommandProc)&WMain::cmdEditTheOther,
IDM_KENTHEOTHER );
// zpb_end
return 0;
}
// Event handler for new menu item (programmer written code in protect block)
// zpb_begin WMainMemberFunctions
int WMain::cmdEditTheOther(zCommandEvt* ev) {
delete new zMessage( this, The Other!, WMain, MB_OK );
return 0;
}
// zpb_end
//============================================================================
// In H file
// zpb_begin AdditionalIDs
#define IDM_KENTHEOTHER 10417 //<=========== Any unique number
// zpb_end
//============================================================================
// In RC file
// zpb_begin RCFile
STRINGTABLE {
IDM_KENTHEOTHER, The Other
}
// zpb_end