Helps commands work with the MapControl, PageLayoutControl, ArcMap, custom controls and applications.
Product Availability
Description
The HookHelper is designed to help developers write custom commands that will work with some ArcGIS Engine Controls and applications.
When creating a custom command the ICommand::OnCreate event is passed a hook to the control or application that the command will work with. The command needs to determine the type of hook that is passed so it knows how to handle itself. Rather than adding code into the ICommand::OnCreate event to determine the type of hook a HookHelper object can do this. The HookHelper is used to hold the hook and return the IActiveView, PageLayout or FocusMap regardless of whether the hook is a MapControl, PageLayoutControl, ToolbarControl (with a 'buddy' MapControl or PageLayoutControl), the ArcMap application or a custom control or application implementing ICommandHook.
When using the HookHelper in the ICommand::OnCreate event of custom commands the following must be considered:
- Use the HookHelper when the command is to support a variety of hook objects. If the command is to support one type of hook object only (e.g. a command that only works with IMxApplication in ArcMap) the HookHelper does not offer anything over a simple interface pointer stored as a member variable in the command implementation.
- The HookHelper is useful for writing ArcGIS Engine commands as it can handle the MapControl, PageLayoutControl or theToolbarControl passed as a hook. In the case of the ToolbarControl, the HookHelper contains the logic for testing the ToolbarControl's Buddy to retieve IActiveView, PageLayout and Map objects.
- If the custom command is to work with the ArcGIS Controls on an ArcGIS Engine installation and inside the ArcMap desktop application, the HookHelper can provide generic access to IActiveView, PageLayout and Map objects. There is a good chance an Engine command that starts from these objects will also work within ArcMap, providing that the IToolbarControl interface and other ArcGIS Control specific interfaces have not been used.
- If the custom command requires the use of additional objects and interfaces that are only present in an ArcGIS Desktop installation such as IEditor and IMxApplication, then ArcGIS Desktop must be installed in order for these references to be resolved and for the code to compile. If the command makes use of desktop only objects the command will not work on a machine with only an ArcGIS Engine installation. One possible solution is for the command logic to test whether the hook object is a type of ArcGIS Control, and if so provide an alternative implemetation for an ArcGIS Engine only installation.
Extended Error Information
Use the ISupportErrorInfo method InterfaceSupportsErrorInfo to determine if the object supports extended error information. If the object supports extended error info, VC++ developers should use the OLE/COM IErrorInfo interface to access the ErrorInfo object. Visual Basic developers should use the global error object Err to retrieve this extended error information.
Interfaces
Interfaces | Description |
---|---|
IConnectionPointContainer | Supports connection points for connectable objects. |
IHookActions | Provides access to actions such as flashing, panning and zooming that help in the development of commands to work with controls, custom controls and applications. |
IHookHelper | Provides access to members needed when developing commands to work with the MapControl, PageLayoutControl, ArcMap, and custom controls and applications. |
ISupportErrorInfo | Indicates whether a specific interface can return Automation error objects. |
Event Interfaces
Interfaces | Description |
---|---|
IHookHelperEvents (default) | Provides access to events that occur when the state of a hook changes. |
Working with Events
When working with HookHelper's default outbound interface in Visual Basic 6 declare variables as follows: Private WithEvents pHookHelper as HookHelper