Usando a funcionalidade do contêiner
As seções anteriores descreveram alguns dos suportes necessários do lado do chamador que um controle ActiveX deve ter para acessar determinados recursos de seu contêiner. A tabela a seguir descreve o uso de interfaces do lado do contêiner por um controle e quando esse uso ocorreria.
Interface | Objeto de contêiner | Uso |
---|---|---|
IOleClientSite |
Site |
Os controles que implementam IOleObject chamam os métodos IOleClientSite como parte do protocolo de incorporação OLE padrão, especificamente os métodos SaveObject, ShowObject, OnShowWindow (somente se um estado de ativação de janela separada for suportado), RequestNewObjectLayout e GetContainer (se a comunicação com outros controles for desejada). O método GetMoniker só é usado quando o controle pode ser vinculado externamente, ou seja, o controle não é marcado com OLEMISC_CANTLINKINSIDE. |
IOleInPlaceSite |
Site |
Os controles que têm uma ativação in-loco e, possivelmente, um estado ativo da interface do usuário chamarão os métodos IOleInPlaceSite (geralmente todos eles, com exceção de ContextSensitiveHelp) como parte do protocolo de ativação OLE in-loco padrão. |
IAdviseSink |
Site |
O controle chama OnDataChange se o controle oferece suporte a IDataObject, OnViewChange se o controle oferece suporte a IViewObject2 e OnClose, OnSave e OnRename se o controle oferece suporte a IOleObject. |
IOleControlSite |
Site |
Se houver suporte, o controle chamará OnControlInfoChanged quando os mnemônicos forem alterados, LockInPlaceActive e TransformCoords se os eventos forem acionados (o último método só será usado se as coordenadas forem passadas como argumentos de evento), OnFocus e TranslateAccelerator se o controle tiver um estado ativo da interface do usuário e GetExtendedControl se o controle quiser examinar as propriedades de controle estendido (de propriedade do contêiner). |
IDispatch (propriedades do ambiente) |
Site |
Usado para acessar propriedades ambientais. |
IPropertyNotifySink |
Varia |
Um controle deve gerar OnChanged e OnRequestEdit para quaisquer propriedades de controle marcadas como [bindable] e [request], respectivamente. |
Outras interfaces de coletor de eventos |
Varia |
Um controle que tenha interfaces de saída diferentes de IPropertyNotifySink receberá outros ponteiros de interface do IID correto para as implementações IConnectionPoint::Advise do controle (que geralmente são encontradas em subobjetos do controle). Um controle sempre sabe como chamar suas próprias interfaces de evento porque o controle define essas interfaces. |
IOleInPlaceFrame |
Frame |
Usado quando um controle tem um estado ativo da interface do usuário in-loco que requer ferramentas de nível de quadro ou itens de menu. |
IOleInPlaceUIWindow |
Documento |
Usado somente quando um controle tem um estado ativo de interface do usuário in-loco que requer ferramentas de interface do usuário em nível de documento ou de painel. Isso é incomum. |