Reference Manual

  • 15.0
  • 07/23/2021
  • Public Content
Contents

Controlling Menus

You do not have to use the default QuickWin menus. You can eliminate and alter menus, menu item lists, menu titles or item titles. The QuickWin functions that control menus are described in the following sections:

Controlling the Initial Menu and Frame Window

You can change the initial appearance of an application's default frame window and menus by defining an
INITIALSETTINGS
function. If no user-defined
INITIALSETTINGS
function is supplied, QuickWin calls a predefined (default)
INITIALSETTINGS
routine that provides a default frame window and menu.
Your application does not call
INITIALSETTINGS
. If you supply the function in your project, QuickWin calls it automatically.
If you supply it,
INITIALSETTINGS
can call QuickWin functions that set the initial menus and the size and position of the frame window. Besides the menu functions,
SETWSIZEQQ
can be called from your
INITIALSETTINGS
function to adjust the frame window size and position before the window is first drawn.
The following is a sample of
INITIALSETTINGS
:
LOGICAL FUNCTION INITIALSETTINGS( ) USE IFQWIN LOGICAL result TYPE (qwinfo) qwi ! Set window frame size. qwi%x = 0 qwi%y = 0 qwi%w = 400 qwi%h = 400 qwi%type = QWIN$SET i = SetWSizeQQ( QWIN$FRAMEWINDOW, qwi ) ! Create first menu called Games. result = APPENDMENUQQ(1, $MENUENABLED, '&Games'C, NUL ) ! Add item called TicTacToe. result = APPENDMENUQQ(1, $MENUENABLED, '&TicTacToe'C, WINPRINT) ! Draw a separator bar. result = APPENDMENUQQ(1, $MENUSEPARATOR, ''C, NUL ) ! Add item called Exit. result = APPENDMENUQQ(1, $MENUENABLED, 'E&xit'C, WINEXIT ) ! Add second menu called Help. result = APPENDMENUQQ(2, $MENUENABLED, '&Help'C, NUL ) result = APPENDMENUQQ(2, $MENUENABLED, '&QuickWin Help'C, WININDEX) INITIALSETTINGS= .true. END FUNCTION INITIALSETTINGS
QuickWin executes your
INITIALSETTINGS
function during initialization, before creating the frame window. When your function is done, control returns to QuickWin and it does the remaining initialization. The control then passes to the Fortran application.
You only need to include the code for an
INITIALSETTINGS
function in your project. If it is part of your project, you do not need to call your
INITIALSETTINGS
function.
The
INITIALSETTINGS
function can specify the position and size of the frame window and the contents of the menus. Because the
INITIALSETTINGS
function is executed before creating the frame window, it must not call any routines that require that frame window initialization be complete. For example, routines that refer to the child window in focus (such as
SETWINDOWCINFIG
) or a specific child window unit number (such as
OPEN
) should not be called from the
INITIALSETTINGS
function.
Your
INITIALSETTINGS
function should return .TRUE. if it succeeds, and .FALSE. otherwise. The QuickWin default function returns a value of .TRUE. only.
Note that default menus are created after
INITIALSETTINGS
has been called, and only if you do not create your own menus. Therefore, using
DELETEMENUQQ
,
INSERTMENUQQ
,
APPENDMENUQQ
, and the other menu configuration QuickWin functions while in
INITIALSETTINGS
affects your custom menus, not the default QuickWin menus.

Deleting, Inserting, and Appending Menu Items

Menus are defined from left to right, starting with 1 at the far left. Menu items are defined from top to bottom, starting with 0 at the top (the menu title itself). Within
INITIALSETTINGS
, if you supply it, you can delete, insert, and append menu items in custom menus. Outside
INITIALSETTINGS
, you can alter the default QuickWin menus as well as custom menus at any point in your application. (Default QuickWin menus are not created until after
INITIALSETTINGS
has run and only if you do not create custom menus.)
To delete a menu item, specify the menu number and item number in
DELETEMENUQQ
. To delete an entire menu, delete item 0 of that menu. For example:
USE IFQWIN LOGICAL status status = DELETEMENUQQ(1, 2) ! Delete the second menu item from ! menu 1 (the default FILE menu). status = DELETEMENUQQ(5, 0) ! Delete menu 5 (the default Windows ! menu).
INSERTMENUQQ
inserts a menu item or menu and registers its callback routine. QuickWin supplies several standard callback routines such as WINEXIT to terminate a program, WININDEX to list QuickWin Help, and WINCOPY which copies the contents of the current window to the Clipboard. A list of available callbacks is given in the
Language Reference
for
INSERTMENUQQ
and
APPENDMENUQQ
.
Often, you will supply your own callback routines to perform a particular action when a user selects something from one of your menus.
In general, you should not assign the same callback routine to more than one menu item because a menu item's state might not be properly updated when you change it (put a check mark next to it, gray it out, or disable, or enable it). You cannot insert a menu item or menu beyond the existing number; for example, inserting item 7 when 5 and 6 have not been defined yet. To insert an entire menu, specify menu item 0. The new menu can take any position among or immediately after existing menus.
If you specify a menu position occupied by an existing menu, the existing menu and any menus to the right of the one you add are shifted right and their menu numbers are incremented.
For example, the following code inserts a fifth menu item called
Position
into menu 5 (the default Windows menu):
USE IFQWIN LOGICAL status status = INSERTMENUQQ (5, 5, $MENUCHECKED, 'Position'C, WINPRINT)
The next code example inserts a new menu called
My List
into menu position 3. The menu currently in position 3 and any menus to the right (the default menus View, State, Windows, and Help) are shifted right one position:
USE IFQWIN LOGICAL status status = INSERTMENUQQ(3,0, $MENUENABLED, 'My List'C, WINSTATE)
You can append a menu item with . The item is added to the bottom of the menu list. If there is no item yet for the menu, your appended item is treated as the top-level menu item, and the string you assign to it appears on the menu bar.
The QuickWin menu routines like
INSERTMENUQQ
and
APPENDMENUQQ
let you to create a single level of menu items beneath a menu name. You cannot create submenus with the QuickWin project type.
The following code uses
APPENDMENUQQ
to append the menu item called
Cascade Windows
to the first menu (the default File menu):
USE IFQWIN LOGICAL status status = APPENDMENUQQ(1, $MENUCHECKED, 'Cascade Windows'C, & & WINCASCADE)
The $MENUCHECKED flag in the example puts a check mark next to the menu item. To remove the check mark, you can set the flag to $MENUUNCHECKED in the
MODIFYMENUFLAGSQQ
function. Some predefined routines (such as WINSTATUS) take care of updating their own check marks. However, if the routine is registered to more than one menu item, the check marks might not be properly updated. See
APPENDMENUQQ
or
INSERTMENUQQ
in the
Language Reference
for the list of callback routines and other flags.

Modifying Menu Items

MODIFYMENUSTRINGQQ
can modify the string identifier of a menu item,
MODIFYMENUROUTINEQQ
can modify the callback routine called when the item is selected, and
MODIFYMENUFLAGSQQ
can modify a menu item's state (such as enabled, grayed out, checked, and so on).
The following example code uses
MODIFYMENUSTRINGQQ
to modify the menu string for the fourth item in the first menu (the File menu by default) to
Tile Windows
, it uses
MODIFYMENUROUTINEQQ
to change the callback routine called if the item is selected to
WINTILE
, and uses
MODIFYMENUFLAGSQQ
to put a check mark next to the menu item:
status = MODIFYMENUSTRINGQQ( 1, 4, 'Tile Windows'C) status = MODIFYMENUROUTINEQQ( 1, 4, WINTILE) status = MODIFYMENUFLAGSQQ( 1, 4, $MENUCHECKED)

Creating a Menu List of Available Child Windows

By default, the Windows menu contains a list of all open child windows in your QuickWin applications.
SETWINDOWMENUQQ
changes the menu which lists the currently open child windows to the menu you specify. The list of child window names is appended to the end of the menu you choose and deleted from any other menu that previously contained it. For example:
USE IFQWIN LOGICAL status ... ! Append list of open child windows to menu 1 (the default File menu) status = SETWINDOWMENUQQ(1)
Simulating Menu Selections
CLICKMENUQQ
simulates the effect of clicking or selecting a menu command from the Window menu. The QuickWin application behaves as though the user had clicked or selected the command. The following code fragment simulates the effect of selecting the Tile item from the Window menu:
USE IFQWIN INTEGER status status = CLICKMENUQQ(QWIN$TILE)
Items from the Window menu can be specified in
CLICKMENUQQ
. Other predefined routines such as WINFULLSCREEN and WINSIZETOFIT (see the callback subroutine names listed in
APPENDMENUQQ
) can be invoked by calling
CLICKMENUQQ
with an argument containing the
LOC
intrinsic function before the callback routine name. For example, the following program calls WINSIZETOFIT:
! Some of the callback subroutine names listed in APPENDMENUQQ may not ! work or be useful in this context, but they will be "called." ! Run the program and note how the scroll bars disappear use IFQWIN integer result character*1 ch print *,'type a character' read(*,*) ch result = clickmenuqq(loc(WINSIZETOFIT)) print *,'type a character' read(*,*) ch end

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.