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