Compartilhar via


Classe CComCompositeControl

Essa classe fornece os métodos necessários para implementar um controle composto.

Importante

Essa classe e os respectivos membros não podem ser usados em aplicativos executados no Windows Runtime.

Sintaxe

template <class T>
class CComCompositeControl : public CComControl<T,CAxDialogImpl<T>>

Parâmetros

T
Sua classe, derivada de CComObjectRoot ou CComObjectRootEx, bem como de quaisquer outras interfaces que você deseja oferecer suporte para seu controle composto.

Membros

Construtores públicos

Nome Descrição
CComCompositeControl::CComCompositeControl O construtor .
CComCompositeControl::~CComCompositeControl O destruidor.

Métodos públicos

Nome Descrição
CComCompositeControl::AdviseSinkMap Chame esse método para aconselhar ou desavisar todos os controles hospedados pelo controle composto.
CComCompositeControl::CalcExtent Chame esse método para calcular o tamanho em unidades HIMETRIC do recurso de caixa de diálogo usado para hospedar o controle composto.
CComCompositeControl::Create Esse método é chamado para criar a janela de controle para o controle composto.
CComCompositeControl::CreateControlWindow Chame esse método para criar a janela de controle e aconselhar qualquer controle de host.
CComCompositeControl::SetBackgroundColorFromAmbient Chame esse método para definir a cor da tela de fundo do controle composto usando a cor da tela de fundo do contêiner.

Membros de Dados Públicos

Nome Descrição
CComCompositeControl::m_hbrBackground O pincel em segundo plano.
CComCompositeControl::m_hWndFocus O identificador da janela que atualmente tem foco.

Comentários

Classes derivadas da classe CComCompositeControl herdam a funcionalidade de um controle composto ActiveX. Os controles ActiveX derivados de CComCompositeControl são hospedados por uma caixa de diálogo padrão. Esses tipos de controles são chamados de controles compostos porque são capazes de hospedar outros controles (controles nativos do Windows e controles ActiveX).

CComCompositeControl identifica o recurso de caixa de diálogo a ser usado na criação do controle composto ao procurar um membro de dados enumerado na classe filha. A IDD do membro dessa classe filha é definida como a ID do recurso de caixa de diálogo que será usada como janela do controle. Veja a seguir um exemplo do membro de dados que a classe derivada de CComCompositeControl deve conter para identificar o recurso de caixa de diálogo a ser usado para a janela do controle:

enum { IDD = IDD_MYCOMPOSITE };

Observação

Os controles compostos são sempre controles com janelas, embora possam conter controles sem janelas.

Um controle implementado por uma classe derivada de CComCompositeControl tem o comportamento de tabulação padrão interno. Quando o controle recebe o foco ao ser tabulado em um aplicativo de contenção, pressionar sucessivamente a tecla TAB fará com que o foco seja circulado por todos os controles contidos do controle composto e, em seguida, saindo do controle composto e indo para o próximo item na ordem de tabulação do contêiner. A ordem de tabulação dos controles de host é determinada pelo recurso de caixa de diálogo e determina a ordem na qual ocorrerá a tabulação.

Observação

Para que os aceleradores funcionem corretamente com um CComCompositeControl, é necessário carregar uma tabela de acelerador à medida que o controle é criado, passar o identificador e o número de aceleradores de volta para IOleControlImpl::GetControlInfo e, finalmente, destruir a tabela quando o controle for liberado.

Exemplo

// Example for overriding IOleControlImpl::GetControlInfo()
// This example uses the accelerator table from the project resources
// with the identifier IDR_ACCELTABLE
// Define GetControlInfo() in the header of your composite 
// control class as follows:

STDMETHOD(GetControlInfo)(CONTROLINFO* pCI)
{
    // Load the accelerator table from the resource
    pCI->hAccel = LoadAccelerators(_AtlBaseModule.GetResourceInstance(), 
       MAKEINTRESOURCE(IDR_ACCELTABLE));

    if (pCI->hAccel == NULL)
        return E_FAIL;

    // Get the number of accelerators in the table
    pCI->cAccel = (USHORT)CopyAcceleratorTable(pCI->hAccel, NULL, 0);
    // The following is optional if you want your control
    // to process the return and/or escape keys
    // pCI.dwFlags = CTRLINFO_EATS_RETURN | CTRLINFO_EATS_ESCAPE;
    pCI->dwFlags = 0;

    return S_OK;
}

Hierarquia de herança

WinBase

CComControlBase

CComControl

CComCompositeControl

Requisitos

Cabeçalho: atlctl.h

CComCompositeControl::AdviseSinkMap

Chame esse método para aconselhar ou desavisar todos os controles hospedados pelo controle composto.

HRESULT AdviseSinkMap(bool bAdvise);

Parâmetros

bAdvise
True se todos os controles devem ser aconselhados; caso contrário, false.

Valor de retorno

Valor Descrição
S_OK Todos os controles no mapa do coletor de eventos foram conectados ou desconectados da origem do evento com êxito.
E_FAIL Nem todos os controles no mapa do coletor de eventos puderam ser conectados ou desconectados da origem do evento com êxito.
E_POINTER Esse erro geralmente indica um problema com uma entrada no mapa do coletor de eventos do controle ou um problema com um argumento de modelo usado em uma classe base IDispEventImpl ou IDispEventSimpleImpl.
CONNECT_E_ADVISELIMIT O ponto de conexão já atingiu seu limite de conexões e não pode aceitar mais nenhuma.
CONNECT_E_CANNOTCONNECT O coletor não dá suporte à interface exigida por esse ponto de conexão.
CONNECT_E_NOCONNECTION O valor do cookie não representa uma conexão válida. Esse erro geralmente indica um problema com uma entrada no mapa do coletor de eventos do controle ou um problema com um argumento de modelo usado em uma classe base IDispEventImpl ou IDispEventSimpleImpl.

Comentários

A implementação base desse método pesquisa nas entradas no mapa do coletor de eventos. Em seguida, ele aconselha ou desaconselha os pontos de conexão para os objetos COM descritos pelas entradas do coletor do mapa do coletor de eventos. Esse método de membro também se baseia no fato de que a classe derivada herda de uma instância de IDispEventImpl para cada controle no mapa do coletor que deve ser aconselhado ou desaconselhado.

CComCompositeControl::CalcExtent

Chame esse método para calcular o tamanho em unidades HIMETRIC do recurso de caixa de diálogo usado para hospedar o controle composto.

BOOL CalcExtent(SIZE& size);

Parâmetros

size
Uma referência a uma estrutura SIZE a ser preenchida por esse método.

Valor de retorno

TRUE se o controle estiver hospedado por uma caixa de diálogo; caso contrário, FALSE.

Comentários

O tamanho é retornado no parâmetro size.

CComCompositeControl::Create

Esse método é chamado para criar a janela de controle para o controle composto.

HWND Create(
    HWND hWndParent,
    RECT& /* rcPos */,
    LPARAM dwInitParam = NULL);

Parâmetros

hWndParent
Um identificador para a janela pai do controle.

rcPos
Reservado.

dwInitParam
Dados a serem passados para o controle durante a criação do controle. Os dados passados como dwInitParam aparecerão como o parâmetro LPARAM da mensagem WM_INITDIALOG, que será enviado para o controle composto quando ele for criado.

Valor de retorno

Um identificador para a caixa de diálogo de controle composto recém-criada.

Comentários

Esse método geralmente é chamado durante a ativação in-loco do controle.

CComCompositeControl::CComCompositeControl

O construtor .

CComCompositeControl();

Comentários

Inicializa os membros de dados CComCompositeControl::m_hbrBackground e CComCompositeControl::m_hWndFocus para NULL.

CComCompositeControl::~CComCompositeControl

O destruidor.

~CComCompositeControl();

Comentários

Excluirá o objeto em segundo plano se ele existir.

CComCompositeControl::CreateControlWindow

Chame esse método para criar a janela de controle e aconselhar quaisquer controles de host.

virtual HWND CreateControlWindow(
    HWND hWndParent,
    RECT& rcPos);

Parâmetros

hWndParent
Um identificador para a janela pai do controle.

rcPos
O retângulo de posição do controle composto nas coordenadas de cliente em relação a hWndParent.

Valor de retorno

Retorna um identificador para a caixa de diálogo de controle composto recém-criada.

Comentários

Esse método chama CComCompositeControl::Create e CComCompositeControl::AdviseSinkMap.

CComCompositeControl::m_hbrBackground

O pincel em segundo plano.

HBRUSH m_hbrBackground;

CComCompositeControl::m_hWndFocus

O identificador da janela que atualmente tem foco.

HWND m_hWndFocus;

CComCompositeControl::SetBackgroundColorFromAmbient

Chame esse método para definir a cor da tela de fundo do controle composto usando a cor da tela de fundo do contêiner.

HRESULT SetBackgroundColorFromAmbient();

Valor de retorno

Retornará S_OK se houver êxito ou um erro HRESULT, em caso de falha.

Confira também

Classe CComControl
Fundamentos do controle composto
Visão geral da aula