In the following code example, we create a dialog with a menu, outlining the concepts discussed in this chapter. Feel free to use this code as a base for your own DDT projects. This example is also available in your PowerBASIC installation, in the \PBWIN\SAMPLES\DDT\MENU folder.
'===========================================================
'
' Simple example of an application that has a menu and
' requires absolutely no API calls!
'
'===========================================================
#COMPILE EXE
%IDOK = 1
%IDCANCEL = 2
%IDTEXT = 100
%BN_CLICKED = 0
%BS_DEFAULT = 1
%MF_ENABLED = 0
%WM_COMMAND = &H111
%ID_OPEN = 401
%ID_EXIT = 402
%ID_OPTION1 = 403
%ID_OPTION2 = 404
%ID_HELP = 405
%ID_ABOUT = 406
'-----------------------------------------------------------
' ** Global variable to receive the user name
GLOBAL gsUserName AS STRING
'-----------------------------------------------------------
CALLBACK FUNCTION OkButton()
IF CB.MSG = %WM_COMMAND AND CB.CTLMSG = %BN_CLICKED THEN
CONTROL GET TEXT CB.HNDL, %IDTEXT TO gsUserName
DIALOG END CB.HNDL, 1
FUNCTION = 1
END IF
END FUNCTION
'-----------------------------------------------------------
CALLBACK FUNCTION CancelButton()
IF CB.MSG = %WM_COMMAND AND CB.CTLMSG = %BN_CLICKED THEN
DIALOG END CB.HNDL, 0
FUNCTION = 1
END IF
END FUNCTION
'-----------------------------------------------------------
CALLBACK FUNCTION DlgProc()
IF CB.MSG = %WM_COMMAND THEN
IF CB.CTL => %ID_OPEN AND CB.CTL <= %ID_ABOUT THEN
MSGBOX "WM_COMMAND received from a menu item!", &H00002000& ' = %MB_TASKMODAL
FUNCTION = 1
END IF
END IF
END FUNCTION
'-----------------------------------------------------------
FUNCTION PBMAIN () AS LONG
LOCAL hDlg AS DWORD
LOCAL lResult AS LONG
LOCAL hMenu AS DWORD
LOCAL hPopup1 AS DWORD
LOCAL hPopup2 AS DWORD
' ** First create a top-level menu:
MENU NEW BAR TO hMenu
' ** Add a top-level menu item with a popup menu:
MENU NEW POPUP TO hPopup1
MENU ADD POPUP, hMenu, "&File", hPopup1, %MF_ENABLED
MENU ADD STRING, hPopup1, "&Open", %ID_OPEN, %MF_ENABLED
MENU ADD STRING, hPopup1, "&Exit", %ID_EXIT, %MF_ENABLED
MENU ADD STRING, hPopup1, "-", 0, 0
' ** Now we can add another item to the menu that will bring up a sub-menu.
' First we obtain a new popup menu handle to distinguish it from the first
' popup menu:
MENU NEW POPUP TO hPopup2
' ** Now add a new menu item to the first menu.
' This item will bring up the sub-menu when selected:
MENU ADD POPUP, hPopup1, "&More Options", hPopup2, %MF_ENABLED
' ** Now we will define the sub menu:
MENU ADD STRING, hPopup2, "Option &1", %ID_OPTION1, %MF_ENABLED
MENU ADD STRING, hPopup2, "Option &2", %ID_OPTION2, %MF_ENABLED
' ** Finally, we'll add a second top-level menu and popup.
' For this popup, we can reuse the first popup variable:
MENU NEW POPUP TO hPopup1
MENU ADD POPUP, hMenu, "&Help", hPopup1, %MF_ENABLED
MENU ADD STRING, hPopup1, "&Help", %ID_HELP, %MF_ENABLED
MENU ADD STRING, hPopup1, "-", 0, 0
MENU ADD STRING, hPopup1, "&About", %ID_ABOUT, %MF_ENABLED
' ** Create a new dialog template
DIALOG NEW 0, "What is your name?", ,, 160, 60, 0, 0 TO hDlg
' ** Add controls to it
CONTROL ADD TEXTBOX, hDlg, %IDTEXT, "", 14, 12, 134, 12, 0
CONTROL ADD BUTTON, hDlg, %IDOK, "OK", 34, 32, 40, 14, %BS_DEFAULT CALL OkButton
CONTROL ADD BUTTON, hDlg, %IDCANCEL, "Cancel", 84, 32, 40, 14, 0 CALL CancelButton
MENU ATTACH hMenu, hDlg
' ** Display the dialog
DIALOG SHOW MODAL hDlg, CALL DlgProc TO lResult
' ** Check the dialog return result
IF lResult THEN
MSGBOX "Hello " & gsUserName
END IF
END FUNCTION
'-----------------------------------------------------------
See Also