Compartilhar via


Representação Visual

Um controle oferece suporte ao posicionamento e exibição dentro de seu contêiner por meio da tecnologia de documento composto e da tecnologia OLE de arrastar e soltar que envolve o controle e seu contêiner. O comando deve poder desenhar-se enquanto o contentor gere a posição do comando e o seu tamanho.

Os controles são adicionados às funções básicas fornecidas por documentos OLE. Um controle chama o método IOleClientSite::RequestNewObjectLayout de seu cliente para informar ao contêiner que deseja alterar seu tamanho. O cliente chama IOleObject::GetExtent do controle para obter o novo tamanho e chama IOleInPlaceObject::SetObjectRects para definir o controle para seu novo tamanho.

Os controles que oferecem suporte somente a IPersistStream ou IPersistStreamInit não oferecem suporte ao cache por meio de IOleCache2 porque o cache requer suporte para IPersistStorage. No entanto, esses controles devem fornecer uma maneira para o cliente renderizar o controle por meio de IDataObject::GetData para que o cliente possa opcionalmente criar e gerenciar seu próprio cache dos dados de apresentação para o controle.

Os controles usam o tipo HIMETRIC para suas coordenadas. No entanto, contêineres diferentes podem usar sistemas de coordenadas diferentes. O contêiner deseja receber coordenadas em seu próprio sistema, mas o controle não necessariamente sabe quais coordenadas seu contêiner está usando. Para se comunicar com êxito, o controle precisa de uma maneira de converter valores para as coordenadas de seu contêiner. O contêiner fornece um objeto de site com o método IOleControlSite::TransformCoords. O controle chama esse método no site do cliente do contêiner primeiro para converter suas coordenadas nas coordenadas apropriadas para o contêiner. Em seguida, ele pode passar as coordenadas convertidas para o contêiner.

Os controles podem chamar IOleControlSite::LockInPlaceActive no objeto de site do contêiner para impedir que o contêiner tente rebaixar o controle para fora do estado ativo in-loco. Rebaixar o controle dessa maneira faz com que o controle seja desativado e sua janela destruída, portanto, se o controle precisar manter sua janela por um período conhecido, ele pode chamar LockInPlaceActive para garantir seu estado.

Controles ActiveX