[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]

You need some simple code to initialize a class and its hook.  When
initializing a class, you specify the size of the class's instance and
what the superclass is, and you also have to supply a pointer to a hook
entry stub.

The following code fragment illustrates the initialization of a private
subclass of imageclass.


    ULONG __saveds dispatchmyTextLabel();

    /* This is the data that each instance of our class will need. */
    struct localObjData
    {
        /* Font to use */
        struct TextFont *lod_Font;

        /* The key that is underlined */
        UWORD lod_Key;

        /* DrawMode */
        UBYTE lod_Mode;
    };

    #define MYCLASSID           NULL
    #define SUPERCLASSID        (IMAGECLASS)
    #define LSIZE               (sizeof(struct localObjData))

    Class *initmyTextLabelClass (VOID)
    {
        extern ULONG __saveds dispatchmyTextLabel();
        extern ULONG hookEntry ();        /* defined in hookface.asm */
        Class *cl;

        if (cl = MakeClass (MYCLASSID, SUPERCLASSID, NULL, LSIZE, 0))
        {
            /* Fill in the callback hook */
            cl->cl_Dispatcher.h_Entry = hookEntry;
            cl->cl_Dispatcher.h_SubEntry = dispatchmyTextLabel;
        }

        /* Return a pointer to the class */
        return (cl);
    }


In order to make the class public instead of private, do the following:


    #define MYCLASSID           "mytextlabelclass"

    ULONG __saveds dispatchmyTextLabel();

    Class *initmyTextLabelClass (VOID)
    {
        extern ULONG __saveds dispatchmyTextLabel();
        extern ULONG hookEntry ();
        Class *cl;

        if (cl = MakeClass (MYCLASSID, SUPERCLASSID, NULL, LSIZE, 0))
        {
            /* Fill in the callback hook */
            cl->cl_Dispatcher.h_Entry = hookEntry;
            cl->cl_Dispatcher.h_SubEntry = dispatchmyTextLabel;

            /* Make the class public */
            AddClass (cl);
        }

        /* Return a pointer to the class */
        return (cl);
    }