Creating+a+menu+from+a+resource

//by Jon Ripley, June 2006//

The normal method of creating a menu is to use the Windows API functions, and  to create a menu structure: code format="bb4w" 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% code

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): code format="bb4w" 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% code 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 with a call to  as follows: code format="bb4w" SYS "LoadLibrary", "EXAMPLE.DLL" TO hmod% code