Partilhar via


Classe CComCompositeControl

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Esta classe fornece os métodos necessários para implementar um controlo composto.

Importante

Esta classe e os seus membros não podem ser usados em aplicações que sejam executadas no Windows Runtime.

Sintaxe

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

Parâmetros

T
A sua classe, derivada de CComObjectRoot ou CComObjectRootEx, bem como de quaisquer outras interfaces que queira suportar para o seu controlo composto.

Membros

Construtores Públicos

Nome Description
CComCompositeControl::CComCompositeControl O construtor.
CComCompositeControl::~CComCompositeControl O destruidor.

Métodos Públicos

Nome Description
CComCompositeControl::AdviseSinkMap Chame este método para aconselhar ou desaconselhar todos os controlos alojados pelo controlo composto.
CComCompositeControl::CalcExtent Chame este método para calcular o tamanho em unidades HIMÉTRICAS do recurso de diálogo usado para hospedar o controlo composto.
CComCompositeControl::Create Este método é chamado para criar a janela de controlo do controlo composto.
CComCompositeControl::CreateControlWindow Chame este método para criar a janela de controlo e informar qualquer controlo hospedado.
CComCompositeControl::SetBackgroundColorFromAmbient Chame este método para definir a cor de fundo do controlo composto usando a cor de fundo do contentor.

Membros de Dados Públicos

Nome Description
CComCompositeControl::m_hbrBackground O pincel de fundo.
CComCompositeControl::m_hWndFocus A maçaneta da janela que atualmente tem foco.

Observações

As classes derivadas da classe CComCompositeControl herdam a funcionalidade de um controlo composto ActiveX. Os controlos ActiveX derivados de CComCompositeControl são alojados por uma caixa de diálogo padrão. Estes tipos de controlos são chamados controlos compostos porque conseguem alojar outros controlos (controlos nativos do Windows e controlos ActiveX).

CComCompositeControl Identifica o recurso de diálogo a usar na criação do controlo composto procurando um membro de dados enumerado na classe filha. O IDD do membro desta classe filha é definido para o ID do recurso de diálogo que será usado como janela do controlo. Segue-se um exemplo do membro de dados que a classe derivada CComCompositeControl deve conter para identificar o recurso de diálogo a ser usado para a janela do controlo:

enum { IDD = IDD_MYCOMPOSITE };

Observação

Os controlos compostos são sempre controlos em janela, embora possam conter controlos sem janelas.

Um controlo implementado por uma CComCompositeControlclasse derivada em tem um comportamento de tabulação por defeito incorporado. Quando o controlo recebe o foco ao ser pressionado por tab numa aplicação de contenção, pressionar sucessivamente a tecla TAB fará com que o foco seja alternado por todos os controlos contidos do controlo composto, depois saindo do controlo composto e passando para o item seguinte na ordem de tabulação do contentor. A ordem de tabulação dos controlos alojados é determinada pelo recurso de diálogo e determina a ordem em que a tabulação ocorrerá.

Observação

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

Example

// 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

Requerimentos

Cabeçalho: atlctl.h

CComCompositeControl::AdviseSinkMap

Chame este método para aconselhar ou desaconselhar todos os controlos alojados pelo controlo composto.

HRESULT AdviseSinkMap(bool bAdvise);

Parâmetros

bAdvise
É verdade se todos os controlos forem aconselhados; caso contrário, falso.

Valor de retorno

Valor Description
S_OK Todos os controlos no mapa do sumidouro de eventos estavam ligados ou desconectados da sua fonte de eventos com sucesso.
E_FAIL Nem todos os controlos no event sink map poderiam ser ligados ou desligados da sua fonte de eventos com sucesso.
E_POINTER Este erro normalmente indica um problema com uma entrada no event sink map do controlo ou um problema com um argumento modelo usado numa IDispEventImpl ou IDispEventSimpleImpl classe base.
CONNECT_E_ADVISELIMIT O ponto de ligação já atingiu o limite de ligações e não pode aceitar mais.
CONNECT_E_CANNOTCONNECT O sumidouro não suporta a interface exigida por este ponto de ligação.
CONNECT_E_NOCONNECTION O valor do cookie não representa uma ligação válida. Este erro normalmente indica um problema com uma entrada no event sink map do controlo ou um problema com um argumento modelo usado numa IDispEventImpl ou IDispEventSimpleImpl classe base.

Observações

A implementação base deste método pesquisa as entradas no event sink map. Depois, aconselha ou desaconselha os pontos de ligação aos objetos COM descritos pelas entradas do sink do event sink map. Este método dos membros também se baseia no facto de a classe derivada herdar de uma instância de IDispEventImpl para cada controlo no mapa de sumidouro que deve ser aconselhada ou não.

CComCompositeControl::CalcExtent

Chame este método para calcular o tamanho em unidades HIMÉTRICAS do recurso de diálogo usado para hospedar o controlo composto.

BOOL CalcExtent(SIZE& size);

Parâmetros

tamanho
Uma referência a uma SIZE estrutura a ser preenchida por este método.

Valor de retorno

TRUE se o controlo estiver hospedado numa caixa de diálogo; caso contrário, FALSO.

Observações

O tamanho é devolvido no parâmetro de tamanho .

CComCompositeControl::Create

Este método é chamado para criar a janela de controlo do controlo composto.

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

Parâmetros

hWndParent
Uma alavanca para a janela principal do controlo.

rcPos
Reservado.

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

Valor de retorno

Um handle para a recém-criada caixa de diálogo de controlo composto.

Observações

Este método é normalmente chamado durante a ativação no local do controlo.

CComCompositeControl::CComCompositeControl

O construtor.

CComCompositeControl();

Observações

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

CComCompositeControl::~CComCompositeControl

O destruidor.

~CComCompositeControl();

Observações

Apaga o objeto de fundo, se existir.

CComCompositeControl::CreateControlWindow

Chame este método para criar a janela de controlo e informar quaisquer controlos alojados.

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

Parâmetros

hWndParent
Uma alavanca para a janela principal do controlo.

rcPos
O retângulo de posição do controlo composto nas coordenadas do cliente corresponde ao hWndParent.

Valor de retorno

Devolve um handle à nova caixa de diálogo de controlo composto.

Observações

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

CComCompositeControl::m_hbrBackground

O pincel de fundo.

HBRUSH m_hbrBackground;

CComCompositeControl::m_hWndFocus

A maçaneta da janela que atualmente tem foco.

HWND m_hWndFocus;

CComCompositeControl::SetBackgroundColorFromAmbient

Chame este método para definir a cor de fundo do controlo composto usando a cor de fundo do contentor.

HRESULT SetBackgroundColorFromAmbient();

Valor de retorno

Devolve S_OK em caso de sucesso, ou um erro HRESULT em caso de falha.

Consulte também

Classe CComControl
Fundamentos do Controlo Composto
Visão geral da classe