home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mod201j.zip / modula2.exe / os2api / winmenus.def < prev    next >
Text File  |  1994-05-03  |  7KB  |  168 lines

  1. DEFINITION MODULE WINMENUS;
  2.  
  3. (************************************************************************
  4.   OS/2 2.0 interface for Presentation Manager menu controls.
  5.  
  6.   Copyright (c) 1992 by Juergen Neuhoff
  7. *************************************************************************)
  8.  
  9. (*$XL+       Modula-2 language extensions: '_' allowed for symbol names *)
  10. (*$CDECL+    C-style procedures                                         *)
  11. (*$A         default alignment for record fields                        *)
  12.  
  13. IMPORT SYSTEM;
  14. FROM   OS2DEF  IMPORT TYPEPREFIX, HWND, HMODULE, HPS, RECTL;
  15.  
  16. CONST (* Menu control styles *)
  17.   MS_ACTIONBAR             = 00000001H;
  18.   MS_TITLEBUTTON           = 00000002H;
  19.   MS_VERTICALFLIP          = 00000004H;
  20.   MS_CONDITIONALCASCADE    = 00000040H;
  21.  
  22. PROCEDURE WinLoadMenu
  23. ( OwnerWinHandle           : HWND;
  24.   Resource                 : HMODULE;
  25.   MenuId                   : LONGCARD
  26. )                          : HWND;
  27.  
  28. CONST (* Menu control messages *)
  29.   MM_INSERTITEM            = 0180H;
  30.   MM_DELETEITEM            = 0181H;
  31.   MM_QUERYITEM             = 0182H;
  32.   MM_SETITEM               = 0183H;
  33.   MM_QUERYITEMCOUNT        = 0184H;
  34.   MM_STARTMENUMODE         = 0185H;
  35.   MM_ENDMENUMODE           = 0186H;
  36.   MM_REMOVEITEM            = 0188H;
  37.   MM_SELECTITEM            = 0189H;
  38.   MM_QUERYSELITEMID        = 018AH;
  39.   MM_QUERYITEMTEXT         = 018BH;
  40.   MM_QUERYITEMTEXTLENGTH   = 018CH;
  41.   MM_SETITEMHANDLE         = 018DH;
  42.   MM_SETITEMTEXT           = 018EH;
  43.   MM_ITEMPOSITIONFROMID    = 018FH;
  44.   MM_ITEMIDFROMPOSITION    = 0190H;
  45.   MM_QUERYITEMATTR         = 0191H;
  46.   MM_SETITEMATTR           = 0192H;
  47.   MM_ISITEMVALID           = 0193H;
  48.   MM_QUERYITEMRECT         = 0194H;
  49.   MM_QUERYDEFAULTITEMID    = 0431H;
  50.   MM_SETDEFAULTITEMID      = 0432H;
  51.  
  52. PROCEDURE WinCreateMenu
  53. ( OwnerWinHandle           : HWND;
  54.   VAR MenuTemplate         : ARRAY OF SYSTEM.BYTE
  55. )                          : HWND;
  56.  
  57. TYPE (* Owner Item Structure (Also used for listboxes) *)
  58.   OWNERITEM              = RECORD     (* oi *)
  59.     CASE                   : TYPEPREFIX OF
  60.     | TRUE                 :
  61.       hwnd                 : HWND;
  62.       hps                  : HPS;
  63.       fsState              : LONGCARD;
  64.       fsAttribute          : LONGCARD;
  65.       fsStateOld           : LONGCARD;
  66.       fsAttributeOld       : LONGCARD;
  67.       rclItem              : RECTL;
  68.       idItem               : LONGINT; (* idItem for menus, iItem for lb. *)
  69.       hItem                : LONGCARD;
  70.     | FALSE                :
  71.       WinHandle            : HWND;
  72.       PresSpaceHandle      : HPS;
  73.       State                : LONGCARD;
  74.       Attribute            : LONGCARD;
  75.       StateOld             : LONGCARD;
  76.       AttributeOld         : LONGCARD;
  77.       ItemRectl            : RECTL;
  78.       ItemIdent            : LONGINT;
  79.       ItemHandle           : LONGCARD;
  80.     END;                   END;
  81.   POWNERITEM             = POINTER TO OWNERITEM;
  82.  
  83. TYPE (* Menu item *)
  84.   (* Binary resources may be bound into application executables or *)
  85.   (* passed as a parameter when creating a window or dialog        *)
  86.   (* Currently they must be the same for both 16-bit and 32-bit    *)
  87.   (* so we pack the structures.                                    *)
  88.   (*$A2 WORD alignment for record fields >= 2 bytes                *)
  89.   MENUITEM               = RECORD             (* mi *)
  90.     CASE                   : TYPEPREFIX OF
  91.     | TRUE                 :
  92.       iPosition            : INTEGER;
  93.       afStyle              : CARDINAL;
  94.       afAttribute          : CARDINAL;
  95.       id                   : CARDINAL;
  96.       hwndSubMenu          : HWND;
  97.       hItem                : LONGCARD;
  98.     | FALSE                :
  99.       Position             : INTEGER;
  100.       Style                : CARDINAL;
  101.       Attribute            : CARDINAL;
  102.       Id                   : CARDINAL;
  103.       SubMenuWinHandle     : HWND;
  104.       ItemHandle           : LONGCARD;
  105.     END;                   END;
  106.   PMENUITEM              = POINTER TO MENUITEM;
  107.   (*$A default alignment for record fields *)
  108.  
  109. CONST
  110.   MIT_END                = -1;
  111.   MIT_NONE               = -1;
  112.   MIT_MEMERROR           = -1;
  113.   MIT_ERROR              = -1;
  114.   MIT_FIRST              = -2;
  115.   MIT_LAST               = -3;
  116.   MID_NONE               = MIT_NONE;
  117.   MID_ERROR              = -1;
  118.  
  119. CONST
  120.   (* Menu item styles & attributes:                                        *)
  121.   (* In multiple choice submenus a style of 'single' denotes the item is a *)
  122.   (* radiobutton.  Absence of this style defaults the item to a checkbox.  *)
  123.   MIS_TEXT               = 0001H;
  124.   MIS_BITMAP             = 0002H;
  125.   MIS_SEPARATOR          = 0004H;
  126.   MIS_OWNERDRAW          = 0008H;
  127.   MIS_SUBMENU            = 0010H;
  128.   MIS_MULTMENU           = 0020H;    (* multiple choice submenu     *)
  129.   MIS_SYSCOMMAND         = 0040H;
  130.   MIS_HELP               = 0080H;
  131.   MIS_STATIC             = 0100H;
  132.   MIS_BUTTONSEPARATOR    = 0200H;
  133.   MIS_BREAK              = 0400H;
  134.   MIS_BREAKSEPARATOR     = 0800H;
  135.   MIS_GROUP              = 1000H;    (* multiple choice group start *)
  136.   MIS_SINGLE             = 2000H;
  137.   MIA_NODISMISS          = 0020H;
  138.   MIA_FRAMED             = 1000H;
  139.   MIA_CHECKED            = 2000H;
  140.   MIA_DISABLED           = 4000H;
  141.   MIA_HILITED            = 8000H;
  142.  
  143. PROCEDURE WinPopupMenu
  144. ( ParentWinHandle        : HWND;
  145.   OwnerWinHandle         : HWND;
  146.   MenuWinHandle          : HWND;
  147.   x                      : LONGINT;
  148.   y                      : LONGINT;
  149.   ItemId                 : LONGINT;
  150.   Options                : LONGCARD
  151. )                        : BOOLEAN;
  152.  
  153. CONST (* Values of fs in WinPopupMenu call *)
  154.   PU_POSITIONONITEM      = 0001H; (* Need idItem parameter *)
  155.   PU_HCONSTRAIN          = 0002H; (* Keep menu on left and right edge *)
  156.   PU_VCONSTRAIN          = 0004H; (* Keep menu on top and bottom edge *)
  157.   PU_NONE                = 0000H; (* If invoked by keyboard *)
  158.   PU_MOUSEBUTTON1DOWN    = 0008H; (* If invoked by button 1 *)
  159.   PU_MOUSEBUTTON2DOWN    = 0010H; (* If invoked by button 2 *)
  160.   PU_MOUSEBUTTON3DOWN    = 0018H; (* If invoked by button 3 *)
  161.   PU_SELECTITEM          = 0020H; (* Set selected item (use with kbd) *)
  162.   PU_MOUSEBUTTON1        = 0040H; (* If button1 use allowed *)
  163.   PU_MOUSEBUTTON2        = 0080H; (* If button2 use allowed *)
  164.   PU_MOUSEBUTTON3        = 0100H; (* If button3 use allowed *)
  165.   PU_KEYBOARD            = 0200H; (* If keyboard use allowed *)
  166.  
  167. END WINMENUS.
  168.