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

  1. DEFINITION MODULE WINMESSAGEMGR;
  2.  
  3. (************************************************************************
  4.   OS/2 2.0 interface for window message management.
  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, HMQ, HAB, PID, TID, POINTL, APIRET, PSZ;
  15. FROM WINDEF IMPORT MPARAM, MRESULT;
  16. FROM DOSSEMAPHORES IMPORT HEV, HMTX, HMUX;
  17.  
  18. TYPE (* message record from queue *)
  19.    QMSG            = RECORD
  20.      CASE            : TYPEPREFIX OF
  21.      | TRUE          :
  22.        hwnd          : HWND;
  23.        msg           : LONGCARD;
  24.        mp1           : MPARAM;
  25.        mp2           : MPARAM;
  26.        time          : LONGCARD;
  27.        ptl           : POINTL;
  28.        reserved      : LONGCARD;
  29.      | FALSE         :
  30.        WinHandle     : HWND;
  31.        MsgId         : LONGCARD;
  32.        Param1        : MPARAM;
  33.        Param2        : MPARAM;
  34.        Time          : LONGCARD;
  35.        Point         : POINTL;
  36.        Reserved      : LONGCARD;
  37.      END;            END;
  38.    PQMSG           = POINTER TO QMSG;
  39.  
  40. CONST (* Standard Window Messages *)
  41.   WM_NULL                  = 0000H;
  42.   WM_CREATE                = 0001H;
  43.   WM_DESTROY               = 0002H;
  44.   WM_ENABLE                = 0004H;
  45.   WM_SHOW                  = 0005H;
  46.   WM_MOVE                  = 0006H;
  47.   WM_SIZE                  = 0007H;
  48.   WM_ADJUSTWINDOWPOS       = 0008H;
  49.   WM_CALCVALIDRECTS        = 0009H;
  50.   WM_SETWINDOWPARAMS       = 000AH;
  51.   WM_QUERYWINDOWPARAMS     = 000BH;
  52.   WM_HITTEST               = 000CH;
  53.   WM_ACTIVATE              = 000DH;
  54.   WM_SETFOCUS              = 000FH;
  55.   WM_SETSELECTION          = 0010H;
  56.  
  57. CONST (* language support Winproc *)
  58.   WM_PPAINT                = 0011H;
  59.   WM_PSETFOCUS             = 0012H;
  60.   WM_PSYSCOLORCHANGE       = 0013H;
  61.   WM_PSIZE                 = 0014H;
  62.   WM_PACTIVATE             = 0015H;
  63.   WM_PCONTROL              = 0016H;
  64.   WM_COMMAND               = 0020H;
  65.   WM_SYSCOMMAND            = 0021H;
  66.   WM_HELP                  = 0022H;
  67.   WM_PAINT                 = 0023H;
  68.   WM_TIMER                 = 0024H;
  69.   WM_SEM1                  = 0025H;
  70.   WM_SEM2                  = 0026H;
  71.   WM_SEM3                  = 0027H;
  72.   WM_SEM4                  = 0028H;
  73.   WM_CLOSE                 = 0029H;
  74.   WM_QUIT                  = 002AH;
  75.   WM_SYSCOLORCHANGE        = 002BH;
  76.   WM_SYSVALUECHANGED       = 002DH;
  77.   WM_APPTERMINATENOTIFY    = 002EH;
  78.   WM_PRESPARAMCHANGED      = 002FH;
  79.  
  80. CONST (* Control notification messages *)
  81.   WM_CONTROL               = 0030H;
  82.   WM_VSCROLL               = 0031H;
  83.   WM_HSCROLL               = 0032H;
  84.   WM_INITMENU              = 0033H;
  85.   WM_MENUSELECT            = 0034H;
  86.   WM_MENUEND               = 0035H;
  87.   WM_DRAWITEM              = 0036H;
  88.   WM_MEASUREITEM           = 0037H;
  89.   WM_CONTROLPOINTER        = 0038H;
  90.   WM_QUERYDLGCODE          = 003AH;
  91.   WM_INITDLG               = 003BH;
  92.   WM_SUBSTITUTESTRING      = 003CH;
  93.   WM_MATCHMNEMONIC         = 003DH;
  94.   WM_SAVEAPPLICATION       = 003EH;
  95.  
  96. CONST
  97.   (*************************************************************************
  98.   * Reserve a range of messages for help manager.  This range includes
  99.   * public messages, defined below, and private ones, which need to be
  100.   * reserved here to prevent clashing with application messages
  101.   *************************************************************************)
  102.   WM_HELPBASE         = 0F00H; (* Start of msgs for help manager   *)
  103.   WM_HELPTOP          = 0FFFH; (* End of msgs for help manager     *)
  104.   WM_USER             = 1000H;
  105.  
  106. CONST (* WM_COMMAND msg source codes *)
  107.   CMDSRC_PUSHBUTTON   = 1;
  108.   CMDSRC_MENU         = 2;
  109.   CMDSRC_ACCELERATOR  = 3;
  110.   CMDSRC_FONTDLG      = 4;
  111.   CMDSRC_FILEDLG      = 5;
  112.   CMDSRC_PRINTDLG     = 6;
  113.   CMDSRC_COLORDLG     = 7;
  114.   CMDSRC_OTHER        = 0;
  115.  
  116. TYPE
  117.  (*
  118.   * The following structure is used to access the
  119.   * WM_COMMAND, WM_HELP, and WM_SYSCOMMAND message parameters, e.g.:
  120.   *
  121.   *   PROCEDURE MyWindowProc
  122.   *   ( WinHandle:HWND; MsgId:LONGCARD; Param1,Param2:MPARAM ):MRESULT;
  123.   *   ...
  124.   *   VAR CommandMsg : POINTER TO COMMANDMSG;
  125.   *   ...
  126.   *   BEGIN
  127.   *     CASE MsgId OF
  128.   *       WM_COMMAND:
  129.   *       WM_HELP:
  130.   *       WM_SYSCOMMAND:
  131.   *         CommandMsg := SYSTEM.ADR( Param1 );
  132.   *         ...
  133.   *         RETURN ...;
  134.   *       ELSE
  135.   *         RETURN WinDefWindowProc( WinHandle, MsgId, Param1, Param2 );
  136.   *     END;
  137.   *   END MyWindowProc;
  138.   *)
  139.   (*$A1 BYTE alignment for record fields *)
  140.   COMMANDMSG  = RECORD
  141.     CASE        : TYPEPREFIX OF
  142.     | TRUE      :
  143.       cmd       : CARDINAL;      (* mp1 *)
  144.       unused    : CARDINAL;
  145.       source    : CARDINAL;      (* mp2 *)
  146.       fMouse    : CARDINAL;
  147.     | FALSE     :
  148.       Cmd       : CARDINAL;      (* mp1 *)
  149.       Unused    : CARDINAL;
  150.       Source    : CARDINAL;      (* mp2 *)
  151.       MouseFlag : CARDINAL;
  152.     END;        END;
  153.   CMDMSG      = COMMANDMSG;
  154.   PCMDMSG     = POINTER TO CMDMSG;
  155.   PCOMMANDMSG = POINTER TO COMMANDMSG;
  156.   (*$A default alignment for record fields *)
  157.  
  158. TYPE (* The following structure is used by WinQueryQueueInfo() *)
  159.   MQINFO      = RECORD
  160.     CASE        : TYPEPREFIX OF
  161.     | TRUE      :
  162.       cb        : LONGCARD;
  163.       pid       : PID;
  164.       tid       : TID;
  165.       cmsgs     : LONGCARD;
  166.       pReserved : SYSTEM.ADDRESS;
  167.     | FALSE     :
  168.       Count     : LONGCARD;
  169.       ProcessId : PID;
  170.       ThreadId  : TID;
  171.       Messages  : LONGCARD;
  172.       Reserved  : SYSTEM.ADDRESS;
  173.     END;        END;
  174.   PMQINFO     = POINTER TO MQINFO;
  175.  
  176.  
  177. PROCEDURE WinSendMsg
  178. ( WinHandle          : HWND;
  179.   MessageId          : LONGCARD;
  180.   Param1             : MPARAM;
  181.   Param2             : MPARAM
  182. )                    : MRESULT;
  183.  
  184. PROCEDURE WinCreateMsgQueue
  185. ( AnchorBlockHandle  : HAB;
  186.   QueueSize          : LONGINT
  187. )                    : HMQ;
  188.  
  189. PROCEDURE WinDestroyMsgQueue
  190. ( MsgQueueHandle     : HMQ
  191. )                    : BOOLEAN;
  192.  
  193. PROCEDURE WinQueryQueueInfo
  194. ( MsgQueueHandle     : HMQ;
  195.   VAR MsgQueueInfo   : MQINFO;
  196.   MsgQueueInfoSize   : LONGCARD
  197. )                    : BOOLEAN;
  198.  
  199. PROCEDURE WinCancelShutdown
  200. ( MsgQueueHandle     : HMQ;
  201.   CancelAlways       : BOOLEAN
  202. )                    : BOOLEAN;
  203.  
  204. PROCEDURE WinGetMsg
  205. ( AnchorBlockHandle  : HAB;
  206.   VAR QueueMessage   : QMSG;
  207.   FilterWinHandle    : HWND;
  208.   FilterFirst        : LONGCARD;
  209.   FilterLast         : LONGCARD
  210. )                    : BOOLEAN;
  211.  
  212. PROCEDURE WinPeekMsg
  213. ( AnchorBlockHandle  : HAB;
  214.   VAR QueueMessage   : QMSG;
  215.   FilterWinHandle    : HWND;
  216.   FilterFirst        : LONGCARD;
  217.   FilterLast         : LONGCARD;
  218.   Options            : LONGCARD
  219. )                    : BOOLEAN;
  220.  
  221. CONST (* WinPeekMsg() constants *)
  222.   PM_REMOVE          = 0001H;
  223.   PM_NOREMOVE        = 0000H;
  224.  
  225. PROCEDURE WinDispatchMsg
  226. ( AnchorBlockHandle  : HAB;
  227.   VAR QueueMessage   : QMSG
  228. )                    : MRESULT;
  229.  
  230. PROCEDURE WinPostMsg
  231. ( WinHandle          : HWND;
  232.   MessageId          : LONGCARD;
  233.   Param1             : MPARAM;
  234.   Param2             : MPARAM
  235. )                    : BOOLEAN;
  236.  
  237. PROCEDURE WinRegisterUserMsg
  238. ( AnchorBlockHandle  : HAB;
  239.   MessageId          : LONGCARD;
  240.   Type1              : LONGINT;
  241.   Dir1               : LONGINT;
  242.   Type2              : LONGINT;
  243.   Dir2               : LONGINT;
  244.   TypeR              : LONGINT
  245. )                    : BOOLEAN;
  246.  
  247. CONST (* WinRegisterUserMsg() direction codes *)
  248.   RUM_IN             = 1;
  249.   RUM_OUT            = 2;
  250.   RUM_INOUT          = 3;
  251.  
  252. PROCEDURE WinRegisterUserDatatype
  253. ( AnchorBlockHandle  : HAB;
  254.   DataType           : LONGINT;            (* see WINTYPES.DEF *)
  255.   Count              : LONGINT;
  256.   VAR Types          : ARRAY OF LONGINT    (* see WINTYPES.DEF *)
  257. )                    : BOOLEAN;
  258.  
  259. PROCEDURE WinSetMsgMode
  260. ( AnchorBlockHandle  : HAB;
  261.   ClassName          : ARRAY OF CHAR;
  262.   Control            : LONGINT
  263. )                    : BOOLEAN;
  264.  
  265. CONST (* WinSetMsgMode() constants *)
  266.   SMD_DELAYED        = 0001H;
  267.   SMD_IMMEDIATE      = 0002H;
  268.  
  269. PROCEDURE WinSetSynchroMode
  270. ( AnchorBlockHandle  : HAB;
  271.   Mode               : LONGINT
  272. )                    : BOOLEAN;
  273.  
  274. CONST (* WinSetSynchroMode() constants *)
  275.   SSM_SYNCHRONOUS    = 0001H;
  276.   SSM_ASYNCHRONOUS   = 0002H;
  277.   SSM_MIXED          = 0003H;
  278.  
  279. CONST (* WM_CALCVALIDRECTS return flags *)
  280.   CVR_ALIGNLEFT      = 0001H;
  281.   CVR_ALIGNBOTTOM    = 0002H;
  282.   CVR_ALIGNRIGHT     = 0004H;
  283.   CVR_ALIGNTOP       = 0008H;
  284.   CVR_REDRAW         = 0010H;
  285.  
  286. CONST (* WM_HITTEST return codes *)
  287.   HT_NORMAL          =  0;
  288.   HT_TRANSPARENT     = -1;
  289.   HT_DISCARD         = -2;
  290.   HT_ERROR           = -3;
  291.  
  292. TYPE (* WM_SET/QUERYWINDOWPARAMS structure *)
  293.   WNDPARAMS          = RECORD
  294.     CASE               : TYPEPREFIX OF
  295.     | TRUE             :
  296.       fsStatus         : LONGCARD;
  297.       cchText          : LONGCARD;
  298.       pszText          : PSZ;
  299.       cbPresParams     : LONGCARD;
  300.       pPresParams      : SYSTEM.ADDRESS;
  301.       cbCtlData        : LONGCARD;
  302.       pCtlData         : SYSTEM.ADDRESS;
  303.     | FALSE            :
  304.       Status           : LONGCARD;
  305.       TextSize         : LONGCARD;
  306.       Text             : PSZ;
  307.       PresParamsCount  : LONGCARD;
  308.       PresParams       : SYSTEM.ADDRESS;
  309.       CtlDataSize      : LONGCARD;
  310.       CtlData          : SYSTEM.ADDRESS;
  311.     END;               END;
  312.   PWNDPARAMS         = POINTER TO WNDPARAMS;
  313.  
  314. CONST (* WM_SET/QUERYWINDOWPARAMS flags *)
  315.   WPM_TEXT           = 0001H;
  316.   WPM_CTLDATA        = 0002H;
  317.   WPM_PRESPARAMS     = 0004H;
  318.   WPM_CCHTEXT        = 0008H;
  319.   WPM_CBCTLDATA      = 0010H;
  320.   WPM_CBPRESPARAMS   = 0020H;
  321.  
  322. PROCEDURE WinInSendMsg
  323. ( AnchorBlockHandle  : HAB
  324. )                    : BOOLEAN;
  325.  
  326. PROCEDURE WinBroadcastMsg
  327. ( ParentWinHandle    : HWND;
  328.   MessageId          : LONGCARD;
  329.   Param1             : MPARAM;
  330.   Param2             : MPARAM;
  331.   CmdFlags           : LONGCARD
  332. )                    : BOOLEAN;
  333.  
  334. CONST (* WinBroadcastMsg() codes *)
  335.   BMSG_POST          = 0000H;
  336.   BMSG_SEND          = 0001H;
  337.   BMSG_POSTQUEUE     = 0002H;
  338.   BMSG_DESCENDANTS   = 0004H;
  339.   BMSG_FRAMEONLY     = 0008H;
  340.  
  341. PROCEDURE WinWaitMsg
  342. ( AnchorBlockHandle  : HAB;
  343.   First              : LONGCARD;
  344.   Last               : LONGCARD
  345. )                    : BOOLEAN;
  346.  
  347. PROCEDURE WinQueryQueueStatus
  348. ( DesktopWinHandle   : HWND
  349. )                    : LONGCARD;
  350.  
  351. CONST (* WinQueryQueueStatus() constants *)
  352.   QS_KEY             = 0001H;
  353.   QS_MOUSEBUTTON     = 0002H;
  354.   QS_MOUSEMOVE       = 0004H;
  355.   QS_MOUSE           = 0006H;   (* QS_MOUSEMOVE OR QS_MOUSEBUTTON *)
  356.   QS_TIMER           = 0008H;
  357.   QS_PAINT           = 0010H;
  358.   QS_POSTMSG         = 0020H;
  359.   QS_SEM1            = 0040H;
  360.   QS_SEM2            = 0080H;
  361.   QS_SEM3            = 0100H;
  362.   QS_SEM4            = 0200H;
  363.   QS_SENDMSG         = 0400H;
  364.  
  365. PROCEDURE WinQueryMsgPos
  366. ( AnchorBlockHandle  : HAB;
  367.   VAR PointerPos     : POINTL
  368. )                    : BOOLEAN;
  369.  
  370. PROCEDURE WinQueryMsgTime
  371. ( AnchorBlockHandle  : HAB
  372. )                    : LONGCARD;
  373.  
  374. PROCEDURE WinWaitEventSem
  375. ( EventHandle        : HEV;
  376.   TimeOut            : LONGCARD (* in milliseconds *)
  377. )                    : APIRET;
  378.  
  379. PROCEDURE WinRequestMutexSem
  380. ( MutexHandle        : HMTX;
  381.   TimeOut            : LONGCARD (* in millisenconds *)
  382. )                    : APIRET;
  383.  
  384. PROCEDURE WinWaitMuxWaitSem
  385. ( MuxWaitHandle      : HMUX;
  386.   TimeOut            : LONGCARD; (* in milliseconds *)
  387.   VAR User           : LONGCARD
  388. )                    : APIRET;
  389.  
  390. PROCEDURE WinPostQueueMsg
  391. ( MsgQueueHandle     : HMQ;
  392.   MsgId              : LONGCARD;
  393.   Param1             : MPARAM;
  394.   Param2             : MPARAM
  395. )                    : BOOLEAN;
  396.  
  397. CONST (* WinSetMsgInterest()/WinSetClassMsgInterest() constants *)
  398.   SMIM_ALL           = 0EFFH;
  399.   SMI_NOINTEREST     = 0001H;
  400.   SMI_INTEREST       = 0002H;
  401.   SMI_RESET          = 0004H;
  402.   SMI_AUTODISPATCH   = 0008H;
  403.  
  404. PROCEDURE WinSetMsgInterest
  405. ( WinHandle          : HWND;
  406.   MsgClass           : LONGCARD;
  407.   Control            : LONGINT
  408. )                    : BOOLEAN;
  409.  
  410. PROCEDURE WinSetClassMsgInterest
  411. ( AnchorBlockHandle  : HAB;
  412.   ClassName          : ARRAY OF CHAR;
  413.   MsgClass           : LONGCARD;
  414.   Control            : LONGINT
  415. )                    : BOOLEAN;
  416.  
  417. END WINMESSAGEMGR.
  418.