The routine is conceptually recursive, in that it is used as the callback routine for the buttons in the help dialog. The
client_data is used as an index into the help_text array. When this parameter is 0, the routine was called by
the original MessageDialog. Otherwise, the routine was invoked as a result of the user pressing the Previous button or
the More Help button. In this case, the index is changed so that the help text changes.
If the InformationDialog has already been created and the user presses the Help button anyway, the dialog is
remapped and raised to the top of the screen using XMapRaised(). If the parent dialog is unmapped or destroyed,
the InformationDialog is also unmapped or destroyed. In order to maintain the correct state information, we install an
XmNdestroyCallback to monitor the destruction of the InformationDialog. When the dialog is destroyed, we
need to reset the handle to the dialog to NULL so that we cannot reference the destroyed dialog again from
help_callback() the next time help is requested.
All of our help text is fairly short, but if you need to provide help text that longer, you may want to use a ScrolledText
object in your help dialog. With a ScrolledText object, you can display text of an arbitrary length without worrying
about screen real estate. This technique is explained in Chapter 7, Custom Dialogs.
22.1.2 Context−sensitive Help
Although the user can access the help system by using the HELP or F1 keys, this interface is somewhat cumbersome
and it ...