|
|
Two windows are associated with each menu -- the menu window and the menu subwindow. The following functions assign windows and subwindows to menus and fetch those previously assigned to them.
SYNOPSIS
int set_menu_win (menu, window) MENU menu; WINDOW window;To place a border around your menu or give it a title, you call set_menu_win and write to the associated window.WINDOW menu_win (menu) MENU menu;
int set_menu_sub (menu, window) MENU menu; WINDOW window;
WINDOW menu_sub (menu) MENU menu;
If you do not want to use the system defaults, you may create a window and a subwindow for every menu. ETI automatically writes all output of the menu proper on the menu's subwindow. You may write additional output (such as borders, titles, and the like) on the menu's window. The relationship between ETI menu routines, your application program, a menu window, and a menu subwindow is illustrated in ``Menu functions write to subwindow, application to window''.
Menu functions write to subwindow, application to window
``Creating a menu with a border'' shows how you can create and display a menu with a border of the default characters, ACS_VLINE and ACS_HLINE. (See the box command in the curses(3ocurses) manual pages.)
MENU * m; WINDOW * w; int rows, cols;scale_menu (m, &rows, &cols); /* get dimensions of menu */
/* create window 2 characters larger than menu dimensions with top left corner at (0, 0). subwindow is positioned at (1, 1) relative to menu window origin with dimensions equal to the menu dimensions. */
if (w = newwin (rows+2, cols+2, 0, 0)) { set_menu_win (m, w); set_menu_sub (m, derwin (w, rows, cols, 1, 1));
box (w, 0, 0); /* draw border in w */ }
Creating a menu with a border
Variables rows and cols provide the menu dimensions without the border. The dimensions of the menu subwindow are set to these values. In general, if you want a simple border, you should set the number of rows and columns in the menu's window to be two more than the numbers in its subwindow, as in the example.
Remember that the initial default menu window and subwindow are NULL. (By convention, this means that stdscr is used as the menu window and the menu window is used as the menu subwindow.) If you want to change the current default menu window or subwindow, you can pass functions set_menu_win and set_menu_sub a NULL menu pointer. Thus, the code
WINDOW * dftwin;changes the current default window to dftwin.set_menu_win ((MENU *) 0, dftwin); /* sets default menu window to dftwin */
If successful,
functions set_menu_win and set_menu_sub return
E_OK
.
If not, they return one of the following: