mirror of
https://github.com/alfishe/amiga-bootcamp.git
synced 2026-06-13 00:26:28 +00:00
65 lines
1.8 KiB
Markdown
65 lines
1.8 KiB
Markdown
|
|
[← Home](../README.md) · [Intuition](README.md)
|
|||
|
|
|
|||
|
|
# Menus — MenuStrip Construction
|
|||
|
|
|
|||
|
|
## Overview
|
|||
|
|
|
|||
|
|
Intuition menus are structured as: `Menu` → `MenuItem` → `SubItem`. Menus are attached to windows and appear when the user presses the right mouse button.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## GadTools Menu Creation (OS 2.0+)
|
|||
|
|
|
|||
|
|
```c
|
|||
|
|
struct NewMenu nm[] = {
|
|||
|
|
{ NM_TITLE, "Project", NULL, 0, 0, NULL },
|
|||
|
|
{ NM_ITEM, "New", "N", 0, 0, NULL },
|
|||
|
|
{ NM_ITEM, "Open...", "O", 0, 0, NULL },
|
|||
|
|
{ NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }, /* separator */
|
|||
|
|
{ NM_ITEM, "Quit", "Q", 0, 0, NULL },
|
|||
|
|
{ NM_TITLE, "Edit", NULL, 0, 0, NULL },
|
|||
|
|
{ NM_ITEM, "Cut", "X", 0, 0, NULL },
|
|||
|
|
{ NM_ITEM, "Copy", "C", 0, 0, NULL },
|
|||
|
|
{ NM_ITEM, "Paste", "V", 0, 0, NULL },
|
|||
|
|
{ NM_END, NULL, NULL, 0, 0, NULL }
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
struct Menu *menu = CreateMenus(nm, TAG_DONE);
|
|||
|
|
LayoutMenus(menu, vi, TAG_DONE);
|
|||
|
|
SetMenuStrip(win, menu);
|
|||
|
|
|
|||
|
|
/* In event loop on IDCMP_MENUPICK: */
|
|||
|
|
UWORD code = imsg->Code;
|
|||
|
|
while (code != MENUNULL) {
|
|||
|
|
struct MenuItem *item = ItemAddress(menu, code);
|
|||
|
|
UWORD menuNum = MENUNUM(code);
|
|||
|
|
UWORD itemNum = ITEMNUM(code);
|
|||
|
|
UWORD subNum = SUBNUM(code);
|
|||
|
|
/* process selection */
|
|||
|
|
code = item->NextSelect;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* Cleanup: */
|
|||
|
|
ClearMenuStrip(win);
|
|||
|
|
FreeMenus(menu);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Menu Selection Macros
|
|||
|
|
|
|||
|
|
```c
|
|||
|
|
#define MENUNUM(code) ((code) & 0x1F) /* menu number (0–31) */
|
|||
|
|
#define ITEMNUM(code) (((code) >> 5) & 0x3F) /* item number (0–63) */
|
|||
|
|
#define SUBNUM(code) (((code) >> 11) & 0x1F) /* subitem number */
|
|||
|
|
#define FULLMENUNUM(m,i,s) ((m)|((i)<<5)|((s)<<11))
|
|||
|
|
#define MENUNULL 0xFFFF /* no selection */
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## References
|
|||
|
|
|
|||
|
|
- NDK39: `libraries/gadtools.h`, `intuition/intuition.h`
|
|||
|
|
- ADCD 2.1: `CreateMenus`, `LayoutMenus`, `SetMenuStrip`
|