Compartir a través de


CComCompositeControl (clase)

Esta clase proporciona los métodos necesarios para implementar un control compuesto.

Importante

Esta clase y sus miembros no se pueden usar en las aplicaciones que se ejecutan en Windows Runtime.

Sintaxis

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

Parámetros

T
La clase, derivada de CComObjectRoot o CComObjectRootEx, así como de cualquier otra interfaz que desee admitir para el control compuesto.

Miembros

Constructores públicos

Nombre Descripción
CComCompositeControl::CComCompositeControl Constructor .
CComCompositeControl::~CComCompositeControl El destructor .

Métodos públicos

Nombre Descripción
CComCompositeControl::AdviseSinkMap Llame a este método para avisar o desviar todos los controles hospedados por el control compuesto.
CComCompositeControl::CalcExtent Llame a este método para calcular el tamaño en unidades HIMETRIC del recurso de diálogo utilizado para hospedar el control compuesto.
CComCompositeControl::Create Se llama a este método para crear la ventana de control para el control compuesto.
CComCompositeControl::CreateControlWindow Llame a este método para crear la ventana de control y avisar a cualquier control hospedado.
CComCompositeControl::SetBackgroundColorFromAmbient Llame a este método para establecer el color de fondo del control compuesto mediante el color de fondo del contenedor.

Miembros de datos públicos

Nombre Descripción
CComCompositeControl::m_hbrBackground Pincel de fondo.
CComCompositeControl::m_hWndFocus Identificador de la ventana que actualmente tiene el foco.

Comentarios

Las clases derivadas de la clase CComCompositeControl heredan la funcionalidad de un control compuesto ActiveX. Los controles ActiveX derivados de CComCompositeControl se hospedan en un cuadro de diálogo estándar. Estos tipos de controles se denominan controles compuestos porque pueden hospedar otros controles (controles nativos de Windows y controles ActiveX).

CComCompositeControl identifica el recurso de diálogo que se va a usar para crear el control compuesto buscando un miembro de datos enumerado en la clase secundaria. El id. de miembro de esta clase secundaria se establece en el identificador de recurso del recurso de diálogo que se usará como ventana del control. A continuación se muestra un ejemplo del miembro de datos de que la clase derivada de CComCompositeControl debe contener para identificar el recurso de diálogo que se va a usar para la ventana del control:

enum { IDD = IDD_MYCOMPOSITE };

Nota:

Los controles compuestos siempre son controles con ventanas, aunque pueden contener controles sin ventanas.

Un control implementado por una CComCompositeControlclase derivada de tiene un comportamiento de tabulación predeterminado integrado. Cuando el control recibe el foco al ser tabulado en una aplicación contenedora, al presionar sucesivamente la tecla TAB, el foco se desplazará por todos los controles contenidos del control compuesto y, a continuación, fuera del control compuesto y en el siguiente elemento en el orden de tabulación del contenedor. El orden de tabulación de los controles hospedados viene determinado por el recurso de diálogo y determina el orden en que se producirá el tabulador.

Nota:

Para que los aceleradores funcionen correctamente con CComCompositeControl, es necesario cargar una tabla de aceleradores a medida que se crea el control, pasar el identificador y el número de aceleradores de nuevo a IOleControlImpl::GetControlInfo y, por último, destruir la tabla cuando se libere el control.

Ejemplo

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

Jerarquía de herencia

WinBase

CComControlBase

CComControl

CComCompositeControl

Requisitos

Encabezado: atlctl.h

CComCompositeControl::AdviseSinkMap

Llame a este método para avisar o desviar todos los controles hospedados por el control compuesto.

HRESULT AdviseSinkMap(bool bAdvise);

Parámetros

bAdvise
True si se deben recomendar todos los controles; en caso contrario, false.

Valor devuelto

Value Descripción
S_OK Todos los controles del mapa del receptor de eventos se conectaron o desconectaron correctamente de su origen de eventos.
E_FAIL No todos los controles del mapa del receptor de eventos se podrían conectar o desconectar de su origen de eventos correctamente.
E_POINTER Este error suele indicar un problema con una entrada en el mapa receptor de eventos del control o un problema con un argumento de plantilla usado en una clase base IDispEventImpl o IDispEventSimpleImpl.
CONNECT_E_ADVISELIMIT El punto de conexión ya ha alcanzado su límite de conexiones y no puede aceptar más.
CONNECT_E_CANNOTCONNECT El receptor no admite la interfaz requerida por este punto de conexión.
CONNECT_E_NOCONNECTION El valor de cookie no representa una conexión válida. Este error suele indicar un problema con una entrada en el mapa receptor de eventos del control o un problema con un argumento de plantilla usado en una clase base IDispEventImpl o IDispEventSimpleImpl.

Comentarios

La implementación base de este método busca en las entradas del mapa del receptor de eventos. A continuación, aconseja o anula la idea de que la conexión apunta a los objetos COM descritos por las entradas del receptor del receptor de eventos. Este método miembro también se basa en el hecho de que la clase derivada hereda de una instancia de IDispEventImpl para cada control del mapa receptor que se va a recomendar o no diseñar.

CComCompositeControl::CalcExtent

Llame a este método para calcular el tamaño en unidades HIMETRIC del recurso de diálogo utilizado para hospedar el control compuesto.

BOOL CalcExtent(SIZE& size);

Parámetros

size
Referencia a una estructura SIZE que va a rellenar este método.

Valor devuelto

TRUE si el control está hospedado por un cuadro de diálogo; en caso contrario, FALSE.

Comentarios

El tamaño se devuelve en el parámetro size.

CComCompositeControl::Create

Se llama a este método para crear la ventana de control para el control compuesto.

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

Parámetros

hWndParent
Identificador de la ventana primaria del control.

rcPos
Reservado.

dwInitParam
Datos que se van a pasar al control durante la creación del control. Los datos pasados como dwInitParam se mostrarán como el parámetro LPARAM del mensaje WM_INITDIALOG, que se enviará al control compuesto cuando se cree.

Valor devuelto

Identificador del cuadro de diálogo de control compuesto recién creado.

Comentarios

Normalmente se llama a este método durante la activación local del control.

CComCompositeControl::CComCompositeControl

Constructor .

CComCompositeControl();

Comentarios

Inicializa los miembros de datos CComCompositeControl::m_hbrBackground y CComCompositeControl::m_hWndFocus a NULL.

CComCompositeControl::~CComCompositeControl

El destructor .

~CComCompositeControl();

Comentarios

Elimina el objeto de fondo, si existe.

CComCompositeControl::CreateControlWindow

Llame a este método para crear la ventana de control y avisar a los controles hospedados.

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

Parámetros

hWndParent
Identificador de la ventana primaria del control.

rcPos
Rectángulo de posición del control compuesto en coordenadas de cliente relativas a hWndParent.

Valor devuelto

Devuelve un identificador al cuadro de diálogo de control compuesto recién creado.

Comentarios

Este método llama a CComCompositeControl::Create y CComCompositeControl::AdviseSinkMap.

CComCompositeControl::m_hbrBackground

Pincel de fondo.

HBRUSH m_hbrBackground;

CComCompositeControl::m_hWndFocus

Identificador de la ventana que actualmente tiene el foco.

HWND m_hWndFocus;

CComCompositeControl::SetBackgroundColorFromAmbient

Llame a este método para establecer el color de fondo del control compuesto mediante el color de fondo del contenedor.

HRESULT SetBackgroundColorFromAmbient();

Valor devuelto

Devuelve S_OK si es correcto o un error HRESULT en caso de error.

Consulte también

CComControl (clase)
Fundamentos de controles compuestos
Información general sobre la clase