Optional Methods

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).