@database "window_cl"
@master "AMIDEV:NDK/Autodocs/window_cl.doc"

@Node Main "window_cl.doc"
@toc "Autodocs/AG/INDEX/Main"
    @{" --datasheet--() " Link "--datasheet--()"}
    @{" WINDOW_GetClass() " Link "WINDOW_GetClass()"}
    @{" WM_CLOSE " Link "WM_CLOSE"}
    @{" WM_HANDLEINPUT " Link "WM_HANDLEINPUT"}
    @{" WM_ICONIFY " Link "WM_ICONIFY"}
    @{" WM_NEWPREFS " Link "WM_NEWPREFS"}
    @{" WM_OPEN " Link "WM_OPEN"}
    @{" WM_RETHINK " Link "WM_RETHINK"}
@EndNode

@Node "--datasheet--()" "window_cl/--datasheet--"

@{b}    NAME@{ub}
        window_cl -- create Intuition @{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} objects

@{b}    SUPERCLASS@{ub}
        rootclass

@{b}    DESCRIPTION@{ub}
        This class creates standard Intuition Windows, and intelligently
        handles some ReAction house keeping for KeyBoard Control, Defer
        Layout & Render processing, etc. The window class properly handles
        processing messages using shared window message ports as well as
        safely closing intuition windows. The window class will also
        initialize your window's parent layout group properly.

        All window class methods and the callback hooks you provide it are
        executed in the context of the task you call window class from.
        Thus if your application is a process, DOS is safe to use. However,
        remember the Intuition rules about DOS and IDCMP VERIFY messages.

        window.class requires layout.gadget.

@{b}    WINDOW REFRESH@{ub}
        Usually, when all the graphics in your window are handled by
        ReAction, you should not explicitly set the window refresh method
        to either smart or simple refresh. This is a user preference
        setting, and window class will automatically use it. However, if
        your program, for some reason, requires one or the other refresh
        method and can not use the other, set the refresh type in your
        window object creation taglist.

@{b}    BACKFILL PATTERNS@{ub}
        The window.class will install the default backfill pattern on any
        window for which you do not pass a pointer to a custom backfill
        hook. The pattern bitmaps are cached, minimizing memory usage.

        If your windows have elements that look bad or do not work with
        a backfill pattern, install the default @{"NULL" Link "rexxsupport/NULL"} backfill to the
        layout group(s) containing them.

        The backfill installed by window.class is NOT a standard, global
        window layer backfill hook. It is in fact passed to each of the
        layout groups of the window, which will install it during
        refreshes. This approach was chosen because datatypes fail to
        render correctly if their background has been backfilled. This
        method has the side effect that a gadget that is not aware of
        ReAction's method to install a backfill will only have a
        backfill during window refresh (GM_RENDER coming through from
        the parent layout), not during GM_HANDLEINPUT. To make the
        class use the backfill during input handling, it should have
        GA_BackFill as a settable attribute, and install that
        backfill hook before erasing its imagery.

@{b}    METHODS@{ub}
        @{"OM_NEW" Link "tabs_gc/OM_NEW"} -- Passed to superclass first, defaults set, then @{"OM_SET" Link "tabs_gc/OM_SET"}.

        @{"OM_SET" Link "tabs_gc/OM_SET"} -- Passed to superclass first, then custom tags set.

        @{"OM_GET" Link "tabs_gc/OM_GET"} -- Returns requested setting or passed to superclass

        OM_DISPOSE -- Child object disposed then passed to superclass.

        @{"WM_OPEN" Link "WM_OPEN"} -- @{"Lock" Link "dos/Lock()"} default pub screen if needed, domain child layout
            group min/max size, opens window, attaches layout to window.

        @{"WM_CLOSE" Link "WM_CLOSE"} -- Closes the intuition window, but does not dispose
            the child object/layout group.

        @{"WM_ICONIFY" Link "WM_ICONIFY"} -- To iconify, puts Icon on WorkBench, and calls @{"WM_CLOSE" Link "WM_CLOSE"}.

        @{"WM_HANDLEINPUT" Link "WM_HANDLEINPUT"} -- Handles IDCMP input processing, defer layout
            refresh requests, and returns the item ID and Code of
            and selected gadget or menu attached to the window.
            Transparently handles keyboard control.

@{b}    ATTRIBUTES@{ub}
        The following standard Intuition @{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} Tags are supported;

        You may set these while the window is NOT open, at @{"NewObject()" Link "intuition/NewObject()"}
        time or SetAttrs() - between @{"WM_CLOSE" Link "WM_CLOSE"} and @{"WM_OPEN" Link "WM_OPEN"} for example.

            WA_Flags
            WA_NoCareRefresh
            WA_SimpleRefresh
            WA_SmartRefresh
            WA_CloseGadget
            WA_DepthGadget
            WA_SizeGadget
            WA_SizeBRight
            WA_SizeBBottom
            WA_DragBar
            WA_GimmeZeroZero
            WA_Borderless
            WA_Activate
            WA_RMBTrap
            WA_Backdrop
            WA_SuperBitMap
            WA_BackFill
            WA_PubScreen
            WA_CustomScreen
            WA_HelpGroup
            WA_MenuHelp
            WA_Zoom
            WA_NotifyDepth
            WA_MenuHook
            WA_ToolBox

        You may set any of these at any time, @{"NewObject()" Link "intuition/NewObject()"} or SetAttrs();

            WA_Top
            WA_Left
            WA_Width (NOTE: Behaves like WA_InnerWidth)
            WA_Height (NOTE: Behaves like WA_InnerHeight)
            WA_InnerWidth
            WA_InnerHeight
            WA_Title (NOTE: Calls @{"SetWindowTitles()" Link "intuition/SetWindowTitles()"} if the window is open)
            WA_IDCMP (NOTE: Calls @{"ModifyIDCMP()" Link "intuition/ModifyIDCMP()"} if needed)
            WA_BusyPointer (NOTE: Disables Defer Refresh and opens an REQ to
block input)
            WA_WindowBox
            WA_Hidden

        You may @{"GetAttr()" Link "intuition/GetAttr()"} these at any time;

            WA_Top
            WA_Left
            WA_InnerWidth
            WA_InnerHeight
            WA_Width
            WA_Height
            WA_PubScreen
            WA_CustomScreen
            WA_Title
            WA_ScreenTitle
            WA_Zoom
            WA_IDCMP

        These are the @{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} Class specific attributes.

        You may set these while the window is NOT open, at @{"NewObject()" Link "intuition/NewObject()"}
        time or SetAttrs() - between @{"WM_CLOSE" Link "WM_CLOSE"} and @{"WM_OPEN" Link "WM_OPEN"} for example.

        WINDOW_Position (UWORD)
            Set the intial opening position of the window.

                WPOS_CENTERSCREEN - Center on screen
                WPOS_CENTERWINDOW - Center in another window
                WPOS_CENTERMOUSE  - Center under mouse
                WPOS_TOPLEFT      - @{"Open" Link "printer/Open()"} Top/Left, just below screen bar
                WPOS_FULLSCREEN   - @{"Open" Link "printer/Open()"} Top/Left, and fill visible screen cl
ip
                WPOS_ENTIRESCREEN - @{"Open" Link "printer/Open()"} Top/Left, and fill the entire screen
                                    (even for autoscroll screens) (V47)

            Applicability is (OM_NEW, OM_SET)

        WINDOW_LockWidth (ULONG)
            If TRUE, lock the width of the window, ie, disallow
            resizing in this orientation.

            Defaults to FALSE.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_LockHeight (ULONG)
            If TRUE, lock the height of the window, ie, disallow
            resizing in this orientation.

            Defaults to FALSE.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_SharedPort (struct @{"MsgPort" Link "INCLUDE:exec/ports.h/Main" 26} *)
            Pointer to a custom UserPort this window should share.

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NEW, @{"OM_SET" Link "tabs_gc/OM_SET"}, OM_GET)

        WINDOW_AppPort (struct @{"MsgPort" Link "INCLUDE:exec/ports.h/Main" 26} *)
            Pointer to a @{"MsgPort" Link "INCLUDE:exec/ports.h/Main" 26} this window should use for AppMessages.
            By passing this tag the window turns into an @{"AppWindow" Link "INCLUDE:workbench/workbench.h/Main" 178} and
            you can use the @{"WM_ICONIFY" Link "WM_ICONIFY"} method. WindowClass must use the
            ID field of the AppMessages to identify the window to which
            the message was intended. You can use the UserData field
            yourself.

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_AppWindow (BOOL)
            By providing an AppPort and setting this to TRUE, the window
            will be made a Workbench @{"AppWindow" Link "INCLUDE:workbench/workbench.h/Main" 178}. If you don't set this
            attribute, the AppPort will only be used to support
            iconification.

            Defaults to FALSE.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_IconifyGadget (BOOL)
            Set to TRUE to add an iconification gadget to the window
            titlebar.

            Defaults to FALSE.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_BackFillName (STRPTR)
            Name for the custom backfill to use instead of global prefs
            backfill. If you use this tag, make it a user preference.

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NEW, OM_SET)

        It is legal and safe to set any of these at any time, @{"OM_NEW" Link "tabs_gc/OM_NEW"} or
        @{"OM_SET" Link "tabs_gc/OM_SET"} regardless of of the window being open or not, if
        not applicable, the setting will be ignored, or acted on as soon
        as the window opens again...

        WA_BusyPointer (BOOL)
            Set the window to a busy state. If the window is currently
            open, or when is does get opened, the busy pointer is
            set, and a @{"NULL" Link "rexxsupport/NULL"} requester is opened to block menu, gadget
            and keyboard input to the parent window.

            Defaults to FALSE.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_Layout (Object *)
        WINDOW_ParentLayout
        WINDOW_ParentGroup
            Pointer to the parent level layout group object which
            will be added to the window.

            Note the tag has 2 aliased definitions which are now
            obsolete but still supported in the include files.

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_Zoom (BOOL)
            @{"Cause" Link "exec/Cause()"} the window to to be zipped via @{"ZipWindow()" Link "intuition/ZipWindow()"}.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_FrontBack (BOOL)
            Changes window depth arrangement via @{"WindowToFront()" Link "intuition/WindowToFront()"} or
            @{"WindowToBack()" Link "intuition/WindowToBack()"}. Accepted settings;

                WT_FRONT - bring window to front.
                WT_BACK  - put window to back

            Applicability is (OM_NEW, OM_SET)

        WINDOW_UserData (APTR)
            Pointer to your user data. Take note, this is *NOT* the
            same pointer as the Intuition Window's UserData.

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NEW, @{"OM_SET" Link "tabs_gc/OM_SET"}, OM_GET)

        WINDOW_GadgetUserData (UWORD)
            Determines how a gadget's UserData should be interpreted.
            If the userdata is non-null, and this setting is not
            WGUD_IGNORE, then the (hook) function will be called
            when the gadget is selected.

            A function gets the hook's "object" argument in a0 and the
            "message" argument in a1.

            Possible values are;

                WGUD_HOOK   - UserData is hook pointer (struct @{"Hook" Link "INCLUDE:utility/hooks.h/Main" 26} *).
                WGUD_FUNC   - UserData is a pointer to function.
                WGUD_IGNORE - Ignore UserData.

            Defaults to WGUD_IGNORE.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_MenuUserData (UWORD)
            Like the WINDOW_GadgetUserData tag, but for menus. Using
            this implies that WINDOW_MenuStrip has been created with
            GadTools or otherwise has a 32 bit UserData field after
            each menuitem.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_MenuStrip (struct @{"Menu" Link "INCLUDE:intuition/intuition.h/Main" 54} *)
            Pointer to a menu to add to window with @{"SetMenuStrip()" Link "intuition/SetMenuStrip()"}.

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_NewMenu (struct @{"NewMenu" Link "INCLUDE:libraries/gadtools.h/Main" 112} *) (V47)
            Let window.class create and layout the menus for you.
            This is useful for iconification and screenchanges.
            @{"Remember" Link "INCLUDE:intuition/intuition.h/Main" 1503} that the @{"NewMenu" Link "INCLUDE:libraries/gadtools.h/Main" 112} array must be persistent
            because it will be referenced every time the window opens.

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NEW, @{"OM_SET" Link "tabs_gc/OM_SET"}, OM_UPDATE)

        WINDOW_Window (struct @{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} *)
            Pointer to the Intuition @{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942}, or @{"NULL" Link "rexxsupport/NULL"} when the
            window is closed. Be sure NOT to use this pointer after
            closing or iconifying a window, and if needed, re-get
            the pointer after de-iconify.

            Applicability is (OM_GET)

        WINDOW_SigMask (ULONG)
            @{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} signal bit mask.

            Applicability is (OM_GET)

        WINDOW_IconTitle (STRPTR)
            The title of the icon when the window is iconified.

            Defaults to window title.

            Applicability is (OM_NEW, @{"OM_SET" Link "tabs_gc/OM_SET"}, OM_UPDATE)

        WINDOW_Icon (struct @{"DiskObject" Link "INCLUDE:workbench/workbench.h/Main" 81} *)
            The icon to use when iconifying. The icon will be disposed
            of along with the window unless the WINDOW_IconNoDispose
            attribute has been set to TRUE.

            Defaults to ENV:Sys/def_window.info or the default project
            window.

            Applicability is (OM_NEW, @{"OM_SET" Link "tabs_gc/OM_SET"}, OM_UPDATE)

        WINDOW_IconNoDispose (BOOL) (V47)
            Set to TRUE to prevent the @{"DiskObject" Link "INCLUDE:workbench/workbench.h/Main" 81} pointed to by the
            WINDOW_Icon tag from being automatically disposed of.

            Defaults to FALSE.

            Applicability is (OM_NEW, @{"OM_SET" Link "tabs_gc/OM_SET"}, OM_UPDATE)

        WINDOW_GadgetHelp (BOOL)
            Set to TRUE to enabled gadget help processing.

            Defaults to FALSE.

            Applicability is (OM_NEW, @{"OM_SET" Link "tabs_gc/OM_SET"}, OM_UPDATE)

        WINDOW_IDCMPHook (struct @{"Hook" Link "INCLUDE:utility/hooks.h/Main" 26} *)
            Pointer to a @{"Hook" Link "INCLUDE:utility/hooks.h/Main" 26} that should be called for IDCMP messages.
            When the hook is called, the data argument points to the
            window object and message argument to the @{"IntuiMessage" Link "INCLUDE:intuition/intuition.h/Main" 768}.

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_IDCMPHookBits (ULONG)
            If WINDOW_IDCMPHook is set, it will be called for IDCMP
            messages matching this bit mask.

            Defaults to 0L.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_AppMsgHook (struct @{"Hook" Link "INCLUDE:utility/hooks.h/Main" 26} *)
            Pointer to a hook that should be called for AppMessages.
            When this called, the function data argument will point to
            the window object and data argument to the @{"AppMessage" Link "INCLUDE:workbench/workbench.h/Main" 132}.

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_RefWindow (struct @{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} *)
            This causes WINDOW_Position to be relative to the specified
            window vs the screen. Note this is a @{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} pointer, NOT a
            window @{"Object" Link "INCLUDE:intuition/classusr.h/Main" 18} pointer. After deiconifiction or any other
            close/open this tag MUST be reset BEFORE trying to open
            this window. IE, each window reference, must be to a valid
            currently OPEN window, and must be set before opening THIS
            window. (V42)

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_InputEvent (struct IEvent *)
            Pointer to a 'fake' input event which is valid *ONLY* immediatly
            after receiving WHMI_RAWKEY. This provided the additional
            information suitable for you to call @{"MapRawKey()" Link "keymap/MapRawKey()"}. (V42)

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_GET)

        WINDOW_AppWindowPtr (struct @{"AppWindow" Link "INCLUDE:workbench/workbench.h/Main" 178} *)
            Contains the result of the AddAppWindow() call which is
            used when iconifying the window.

            Applicability is (OM_GET)

        WINDOW_Qualifier (UWORD)
            Current qualifiers from the IntuiMessage.Qualifier field.
            Useful for obtaining the qualifiers after @{"WM_HANDLEINPUT" Link "WM_HANDLEINPUT"}
            has returned. (V47)

            Applicability is (OM_GET)

        WINDOW_HintInfo (struct @{"HintInfo" Link "INCLUDE:classes/window.h/Main" 337} *)
            Pointer to a gadget @{"HintInfo" Link "INCLUDE:classes/window.h/Main" 337} array. This is simular in concept
            to Apple's bubble help or Microsoft's help tips. By providing
            this array of helpinfo, and setting WINDOW_GadgetHelp, TRUE,
            window class will transparently manage the help hints. (V43)

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NET, OM_SET)

        WINDOW_PreRefreshHook (struct @{"Hook" Link "INCLUDE:utility/hooks.h/Main" 26} *)
            When ever the window needs to refresh, this hook will be invoked
            AFTER the gadgets are refreshed. It will be called inside a
            @{"BeginRefresh()" Link "intuition/BeginRefresh()"} and @{"EndRefresh()" Link "intuition/EndRefresh()"} pair for simple refresh repair.
            It may also be invoked when a preferences change occurs.

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NEW, OM_SET)

        WINDOW_PostRefreshHook (struct @{"Hook" Link "INCLUDE:utility/hooks.h/Main" 26} *)
            When ever the window needs to refresh, this hook will be invoked
            BEFORE the gadgets are refreshed. It will be called inside a
            @{"BeginRefresh()" Link "intuition/BeginRefresh()"} and @{"EndRefresh()" Link "intuition/EndRefresh()"} pair for simple refresh repair.
            It may also be invoked when a preferences change occurs.

            Defaults to @{"NULL" Link "rexxsupport/NULL"}.

            Applicability is (OM_NEW, OM_SET)

@EndNode

@Node "WINDOW_GetClass()" "window_cl/WINDOW_GetClass"

@{b}   NAME@{ub}
       WINDOW_GetClass -- Gets the pointer to the checkbox class.

@{b}   SYNOPSIS@{ub}
       window_class = WINDOW_GetClass();
       D0

       Class * WINDOW_GetClass(VOID);

@{b}   FUNCTION@{ub}
       This function is only available in runtime linked version of the
       class, window.class and is not in the compiler linker library
       window_cl.lib.

       Obtains the pointer to the @{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} class for use with @{"NewObject()" Link "intuition/NewObject()"}.
       This function always returns a valid pointer so you do not
       need to check it.  The reason is that if the library opens
       fine, then the pointer returned is already setup.  (Of course
       this implies that if opening the library fails, you shouldn't be
       calling this.)

       Note that this function does not create the class, that is done
       when the class library is opened.

@{b}   INPUTS@{ub}
       Nothing.

@{b}   RESULT@{ub}
       window_class - Pointer to the window class.

@EndNode

@Node "WM_CLOSE" "window_cl/WM_CLOSE"

NAME
	WM_CLOSE -- @{"Close" Link "printer/Close()"} a window

SYNOPSIS
	DoMethod( winobj, WM_CLOSE );

FUNCTION
	@{"Close" Link "printer/Close()"} the window of this object. The gadgets are not disposed,
	only detached of a window. If the window is sharing a message
	port with another window, the port will be cleaned of message
	intended for this window. If the window was iconified, the icon
	will be removed.

@EndNode

@Node "WM_HANDLEINPUT" "window_cl/WM_HANDLEINPUT"

NAME
	WM_HANDLEINPUT -- IDCMP input handling method

SYNOPSIS
	result = DoMethod( winobj, WM_HANDLEINPUT, &code );

FUNCTION
	This method is used to handle the IDCMP input of a window. Call
	this method when the signal bit of the window's UserPort is
	set. This method will return when it encounters a message that
	requires notifying your application or when the message port no
	longer contains messages for the window.

	In most cases you will have to also have to request the
	appropriate IDCMP flags via the WA_IDCMP tag, or you will
	not hear the WMHI_#? events.

	The return value is two-part. The upper word describes the
	class of the event the value represents, and the lower word is
	a modifier that describes the event.

	Defined class return codes are:

	WMHI_IGNORE			Ignore this event
	WMHI_LASTMSG		No more messages
	WMHI_CLOSEWINDOW	@{"Close" Link "printer/Close()"} gadget hit
	WMHI_GADGETUP		@{"Gadget" Link "INCLUDE:intuition/intuition.h/Main" 212} hit.
	WMHI_INACTIVE		@{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} went inactive.
	WMHI_ACTIVE			@{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} was activated.
	WMHI_NEWSIZE		@{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} was resized.
	WMHI_MENUPICK		A menu item was selected.
	WMHI_MENUHELP		Help was pressed in a menu.
	WMHI_GADGETHELP		A gadget sends a help message.
	WMHI_ICONIFY		@{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} should be iconified.
	WMHI_UNICONIFY		@{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} was deiconified.
	WMHI_RAWKEY			Raw key code
	WMHI_VANILLAKEY		Vanilla key code
	WMHI_CHANGEWINDOW	@{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} moved (or depth arranged)
	WMHI_INTUITICKS		IDCMP IntuitiTick message
	WMHI_MOUSEMOVE		IDCMP MouseMove message
	WMHI_MOUSEBUTTONS	IDCMP MouseButtons message

	The value of the lower word is defined for WMHI_GADGETUP and
	WMHI_GADGETHELP as the ID of the gadget, and for WMHI_MENUPICK
	and WMHI_MENUHELP as the menu code. WMHI_GAGDETHELP uses the
	special values 0 and WMHI_GADGETMASK as messages "pointer not
	over your window" and "pointer over your window but not over a
	gadget".

	WMHI_RAWKEY returns the raw key ID of the key being
	pressed (to get the qualifiers also, you have to use the IDCMP
	hook), and WMHI_VANILLAKEY returns the ASCII value of the key.
	WMHI_VANILLAKEY is only returned when you set IDCMP_VANILLAKEY.
	Windowclass itself does not need vanilla key IDCMP.

	WMHI_NEWSIZE returns some extra information in the low word:
	if WMF_ZOOMED is set, the window is now in zoomed state. If
	WMF_ZIPWINDOW is set, this resize was caused by either a
	click of the zoom gadget or a call to @{"ZipWindow()" Link "intuition/ZipWindow()"}.

	WMHI_CHANGEWINDOW is returned when the window is moved. For
	resizing of the window, listen to WMHI_NEWSIZE. By setting
	WA_NotifyDepth, this event will also be returned for depth
	arranging. The lower word contains CWCODE_DEPTH in this case.

	WMHI_CLASSMASK masks the lower word of the result code out,
	while WMHI_GADGETMASK and WMHI_MENUMASK mask out the high word,
	leaving only the ID part of the result value.

	A generic application side of WM_HANDLEINPUT looks like this:

	GetAttr( WINDOW_SigMask, winobj, &wsig );

	mask = Wait(wsig);	// maybe other signals

	if (mask & wsig)
		while ((result = DoMethod( winobj, WM_HANDLEINPUT, &code ))
				!= WMHI_LASTMSG)
			switch (result & WMHI_CLASSMASK)
			{
			case WMHI_CLOSEWINDOW:
				close = TRUE;
				break;

			case WMHI_GADGETUP:
				switch (result & WMHI_GADGETMASK)
				{
				// handle the gadgets here
				}

			// handle whatever other events you want here
			}

	if (close)
		DisposeObject( winobj ); // destroy the window

	If you have set up the window to use a shared message port, you
	can simply call this method on each of the windows:

	if (mask & wsig)
	{
		WmHandleInputWin1();
		WmHandleInputWin2();
		WmHandleInputWin3();
	}

INPUTS
	code -- A pointer to a WORD that should be set to contain the
			Code value from the @{"IntuiMessage" Link "INCLUDE:intuition/intuition.h/Main" 768}.

RESULTS
	Windowclass will automatically respond with an appropriate
	action to many input events. When it does not know what to do
	with an event, it will return with a value as descibed above.

@EndNode

@Node "WM_ICONIFY" "window_cl/WM_ICONIFY"

NAME
	WM_ICONIFY -- Hide this window to an icon

SYNOPSIS
	DoMethod( winobj, WM_ICONIFY );

FUNCTION
	@{"Close" Link "printer/Close()"} the window and put an icon on the Workbench for it.

@EndNode

@Node "WM_NEWPREFS" "window_cl/WM_NEWPREFS"

NAME
	WM_NEWPREFS -- Update window prefs and refresh window.

SYNOPSIS
	window = DoMethod( winobj, WM_NEWPREFS );

FUNCTION
	Re-evaluate prefs settings, and relayout window.

RESULTS
	Returns non-zero if method is implemented and succeeds.

@EndNode

@Node "WM_OPEN" "window_cl/WM_OPEN"

NAME
	WM_OPEN -- @{"Open" Link "printer/Open()"} an intuition window.

SYNOPSIS
	window = DoMethod( winobj, WM_OPEN );

FUNCTION
	This function opens the window the object should be handling.
	If the window is already open, it does nothing. If no shared
	message port is set, a message port will be created for this
	window.

RESULTS
	window -- a pointer to the struct @{"Window" Link "INCLUDE:intuition/intuition.h/Main" 942} for this window, or
			@{"NULL" Link "rexxsupport/NULL"} if the window could not be opened.

@EndNode

@Node "WM_RETHINK" "window_cl/WM_RETHINK"

NAME
	WM_RETHINK -- Rethink an open window layout limits

SYNOPSIS
	window = DoMethod( winobj, WM_RETHINK );

FUNCTION
	Re-evaluate layout limits, and relayout window.

RESULTS
	Returns non-zero if method is implemented and succeeds.

@EndNode

