by Jon Ripley, June 2006

The normal method of creating a menu is to use the Windows API functions CreateMenu, CreatePopupMenu and AppendMenu to create a menu structure:
      SYS "CreatePopupMenu" TO m_file%
      SYS "AppendMenu", m_file%, 0, 100, "&New"+CHR$9+"Ctrl+N"
      SYS "AppendMenu", m_file%, 0, 101, "&Open"+CHR$9+"Ctrl+O"
      SYS "AppendMenu", m_file%, 0, 102, "&Save"+CHR$9+"Ctrl+S"
      SYS "AppendMenu", m_file%, 0, 103, "Save &As"+CHR$9+"Ctrl+A"
      SYS "AppendMenu", m_file%, 2048, 104, " "
      SYS "AppendMenu", m_file%, 0, 105, "E&xit"+CHR$9+"Alt+F4"
      SYS "CreateMenu" TO m_main%
      SYS "AppendMenu", m_main%, 16, m_file%, "&File"
      SYS "SetMenu", @hwnd%, m_main%
      SYS "DrawMenuBar", @hwnd%

However there may be circumstances when the menu has already been designed and its template is contained as a resource within a DLL or EXE file. In that case you can create the menu in your program using the resource data. The code example below creates a menu from the resource data for the BB4W IDE menu (in BBCWIN.EXE or BBCWDEM.EXE):
      REM Acquire handle to BBCWIN.EXE or BBCWDEM.EXE
      SYS "GetModuleHandle", 0 TO hmod%
      REM Load menu template into memory
      SYS "LoadMenu", hmod%, "BBCWIN" TO hmenu%
      SYS "LockResource", hmenu%
      REM Attach menu to main window
      SYS "SetMenu", @hwnd%, hmenu%
      REM Draw the menu
      SYS "DrawMenuBar", @hwnd%
      REM Your program goes here...
      REM Destroy the menu and free used memory
      SYS "DestroyMenu", hmenu% TO ret%
Naturally this code will only run within the BB4W IDE, because if compiled to an executable file the menu resource data will not be present.

To load the menu resource data from a different file (for example a DLL) then replace the call to GetModuleHandle with a call to LoadLibrary as follows:
      SYS "LoadLibrary", "EXAMPLE.DLL" TO hmod%