An OLE component can implement an interface without implementing all the semantics of every method in the interface, instead returning E_NOTIMPL or S_OK as appropriate. The following table describes those methods that an ActiveX Control container is not required to implement (i.e. the control container can return E_NOTIMPL).
The table below describes optional methods; note that the method must still exist, but can simply return E_NOTIMPL instead of implementing real semantics. Note that any method from a mandatory interface that is not listed below must be considered mandatory and may not return E_NOTIMPL.
Method | Comments |
---|---|
IOleClientSite | |
SaveObject | Necessary for persistence to be successfully supported. |
GetMoniker | Necessary only if the container supports linking to controls within its own form or document. |
IOleInPlaceSite | |
ContextSensitiveHelp | Optional |
Scroll | May return S_FALSE with no action. |
DiscardUndoState | Can return S_OK with no action. |
DeactivateAndUndo | Deactivation is mandatory; Undo is optional. |
IOleControlSite | |
GetExtendedControl | Necessary for containers that support extended controls. |
ShowPropertyFrame | Necessary for containers that wish to include their own property pages to handle extended control properties in addition to those provided by a control. |
TranslateAccelerator | May return S_FALSE with no action. |
LockInPlaceActive | Optional |
IDispatch (Ambient properties) | |
GetTypeInfoCount | Necessary for containers that support non-standard ambient properties. |
GetTypeInfo | Necessary for containers that support non-standard ambient properties. |
GetIDsOfNames | Necessary for containers that support non-standard ambient properties. |
IDispatch (Event sink) | |
GetTypeInfoCount | The control knows its own type information, so it has no need to call this. |
GetTypeInfo | The control knows its own type information, so it has no need to call this. |
GetIDsOfNames | The control knows its own type information, so it has no need to call this. |
IOleInPlaceFrame | |
ContextSensitiveHelp | |
GetBorder | Necessary for containers with toolbar UI (which is optional) |
RequestBorderSpace | Necessary for containers with toolbar UI (which is optional) |
SetBorderSpace | Necessary for containers with toolbar UI (which is optional) |
InsertMenus | Necessary for containers with menu UI (which is optional) |
SetMenu | Necessary for containers with menu UI (which is optional) |
RemoveMenus | Necessary for containers with menu UI (which is optional) |
SetStatusText | Necessary only for containers that have a status line |
EnableModeless | Optional |
TranslateAccelerator | Optional |
IOleContainer | |
ParseDisplayName | Only if linking to controls or other embeddings in the container is supported, as this is necessary for moniker binding. |
LockContainer | As for ParseDisplayName |
EnumObjects | Returns all ActiveX Controls through an enumerator with IEnumUnknown, but not necessarily all objects (since there's no guarantee that all objects are ActiveX Controls; some may be regular Windows controls). |