The IntuiMessage structure is an Exec Message that has been extended to
include Intuition specific information. The ExecMessage field in the
IntuiMessage is an actual instance of a Message structure and is used by
Exec to manage the transmission of the message. The Intuition extensions
of the IntuiMessage are used to transmit specialized Intuition data to the
program.
struct IntuiMessage
{
struct Message ExecMessage;
ULONG Class;
UWORD Code;
UWORD Qualifier;
APTR IAddress;
WORD MouseX, MouseY;
ULONG Seconds, Micros;
struct Window *IDCMPWindow;
struct IntuiMessage *SpecialLink;
};
The IntuiMessage structure fields are as follows:
ExecMessage
This field is maintained by Exec. It is used for linking the message
into the system and broadcasting it to a message port. See the
chapter "Exec Messages and Ports" for more information on the Message
structure and its use.
Class
Class contains the IDCMP type of this specific message. By comparing
the Class field to the IDCMP flags, the application can determine the
type of this message. Each message may only have a single IDCMP type.
Code
Code contains data set by Intuition, such as menu numbers or special
code values. The meaning of the Code field changes depending on the
IDCMP type, or Class, of the message. Often the code field will
simply contain a copy of the code of the input event which generated
this IntuiMessage.
For example, when the message is of class IDCMP_RAWKEY, Code contains
the raw key code generated by the keyboard device. When the message
is of class IDCMP_VANILLAKEY, Code contains the key mapped ASCII
character.
Qualifier
This contains a copy of the ie_Qualifier field that is transmitted to
Intuition by the input device. This field is useful if your program
handles raw key codes, since the Qualifier tells the program, for
instance, whether or not the Shift key or Ctrl key is currently
pressed. Check the <devices/inputevent.h> file for the definitions
of the qualifier bits.
MouseX and MouseY
Every IntuiMessage will have the mouse coordinates in these
variables. The coordinates can either be expressed as absolute
offsets from the upper left corner of the window, or expressed as the
amount of change since the last reported positions (delta). If
IDCMP_DELTAMOVE is set, then these numbers will represent delta
positions from the last position. All messages will have zero in
these values except IDCMP_MOUSEMOVE and IDCMP_MOUSEBUTTON events,
which will have the correct delta values for the movement. If
IDCMP_DELTAMOVE is not set, then these numbers are the actual window
offset values.
Seconds and Micros
These values are copies of the current system clock, in seconds and
microseconds. They are set when Intuition generates the message.
Microseconds (Micros) range from zero up to one million minus one.
The 32 bits allocated to the Seconds variable has enough accuracy to
count up to 139 years. Time is measured from Jan 1, 1978.
IAddress
Typically this variable contains the address of some Intuition
object, such as a gadget. The type of the object depends on the
Class of the IntuiMessage. Do not assume that the object is of a
certain type before checking the Class of the object.
The IAddress pointer is defined only for the following IDCMP Classes.
Do not attempt to dereference or otherwise interpret the IAddress
field of any other type of IntuiMessage.
IntuiMessage Class Meaning of IAddress Field
------------------ -------------------------
IDCMP_GADGETDOWN IAddress points to the gadget.
IDCMP_GADGETUP IAddress points to the gadget.
IDCMP_RAWKEY IAddress points to the dead-key information.
IDCMP_IDCMPUPDATE IAddress points to a tag item list.
Other classes No meaning.
In particular, for IDCMP_MOUSEMOVE IntuiMessages emanating from
GACT_FOLLOWMOUSE gadgets, the IAddress field does not point to the
gadget. Interpreting the IAddress as a gadget pointer and trying to
access the gadget's fields before ascertaining that the event is an
IDCMP_GADGETUP or IDCMP_GADGETDOWN event is incorrect, and can lead
to subtle or serious problems.
(Note that GadTools gadgets do arrange for the IAddress to point to
the gadget when IDCMP_MOUSEMOVE messages appear).
IDCMPWindow
Contains the address of the window to which this message was sent.
If the application is sharing the window's UserPort between multiple
windows, IDCMPWindow allows it to determine which of the windows the
message was sent to.
SpecialLink
For system use only.