Documentation Archive Developer
Search

ADC Home > Reference Library > Technical Notes > Legacy Documents > Mac OS 9 & Earlier >

Legacy Documentclose button

Important: This document is part of the Legacy section of the ADC Reference Library. This information should not be used for new development.

Current information on this Reference Library topic can be found here:

Movable Modal Dialogs

CONTENTS

This Technical Note describes the process by which an application can remap the Help Manager 'hmnu' resource while a movable modal dialog box is on the screen. The Help Manager handles the case for modal dialog boxes but punts in the case of movable modal dialog boxes. The following information will help you get the correct interface performance.

[Aug 01 1991]






What's involved

The System 7 support for movable modal dialog boxes is limited to providing the new 'WDEF' variant. The rest of the implementation of movable modal dialog boxes is left to the application. Applications must provide handling for all events intended for a movable modal dialog box. This could be accomplished by calling the IsDialogEvent and DialogSelect Toolbox routines, or using other Toolbox routines such as FindWindow, BeginUpdate, DrawDialog, EndUpdate, TrackControl, TEClick.

How you process the events is up to you, but when it comes to appropriate balloon help the application must call the EnableItem, DisableItem and HMSetMenuResID Toolbox routines. The HMSetMenuResID is used before and after enabling or disabling the menus. HMSetMenuResID routine maps an alternative 'hmnu' resource to your menus.

Back to top

The Systems 'hmnu' string resource

Listed here are two alternative 'hmnu' resources. The first one uses the same strings that the Help Manager shows when ModalDialog is called. The constant kHMHelpID is defined in the interface files BalloonsTypes.r, Ballons.h, and Balloons.p. In general it refers to the ID of various Help Mgr resources. In this case it selects a STR# resource in the System and the constants 31 and 32 refer to the string index within that resource. These strings are the ones the Help Manager uses when a Modal Dialog Box is on the screen.

resource 'hmnu' (256,"System Movable Modal Dialog hmnu") {
    HelpMgrVersion,
    hmDefaultOptions,
    0,
    0,

    HMStringResItem {        /* Missing items */
        0, 0,
        kHMHelpID, 31,
        0, 0,
        0, 0,
    },
    {
        HMStringResItem {    /* Menu Title */
            0, 0,
            kHMHelpID, 32,
            0, 0,
        },
    }
};

Back to top

An alternate 'hmnu' from your application

If you don't want to display the same strings that the Help Manager displays for Modal Dialog Boxes, you can map in your own alternate 'hmnu' resource such as the following.

resource 'hmnu' (256,"Application Movable Modal Dialog hmnu") {
    HelpMgrVersion,
    hmDefaultOptions,
    0,
    0,

    HMStringItem {        /* Missing items */
        "",
        "This item is not available because it cannot be used with"
        "the About box on your screen.",
        "",
        "",
    },
    {
        HMStringItem {    /* Menu Title */
            "",
            "This menu is not available because it cannot be used with"
            "the About box on your screen.",
            "",
            "",
        },
    }

Back to top

Using the alternate 'hmnu' resource

After displaying the movable modal dialog box on the screen, the application should disable inappropriate menus and items and map in the alternate 'hmnu' resources.

    menu = GetMHandle(mApple);
    DisableItem(menu, 0);
    HMSetMenuResID(mApple, 256);
    menu = GetMHandle(mFile);
    DisableItem(menu, 0);
    HMSetMenuResID(mFile, 256);
    menu = GetMHandle(mEdit);
    DisableItem(menu, 0);
    HMSetMenuResID(mEdit, 256);

Back to top

Removing the alternate 'hmnu' resource

After removing the movable modal dialog box from the screen, the application must enable appropriate menus and items and unmap the alternate 'hmnu' resources.

    menu = GetMHandle(mApple);
    EnableItem(menu, 0);
    HMSetMenuResID(mApple, -1);
    menu = GetMHandle(mFile);
    EnableItem(menu, 0);
    HMSetMenuResID(mFile, -1);
    menu = GetMHandle(mEdit);
    EnableItem(menu, 0);
    HMSetMenuResID(mEdit, -1);

Note:
The previous fragments of code do not perform error checking. Well-behaved applications perform error checking whenever required. In these example the menu handle should be checked for a nil value before calling DisableItem and EnableItem.


Back to top

References

Inside Macintosh, Volume VI, Help Manager

Back to top

Downloadables

Acrobat gif

Acrobat version of this Note (48K).

Download