Condividi tramite


Classe CComCompositeControl

Questa classe fornisce i metodi necessari per implementare un controllo composito.

Importante

Questa classe e i relativi membri non possono essere usati nelle applicazioni eseguite in Windows Runtime.

Sintassi

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

Parametri

T
La classe, derivata da CComObjectRoot o CComObjectRootEx, nonché da qualsiasi altra interfaccia che si vuole supportare per il controllo composito.

Membri

Costruttori pubblici

Nome Descrizione
CComCompositeControl::CComCompositeControl Costruttore.
CComCompositeControl::~CComCompositeControl Distruttore.

Metodi pubblici

Nome Descrizione
CComCompositeControl::AdviseSinkMap Chiamare questo metodo per consigliare o annullare la visualizzazione di tutti i controlli ospitati dal controllo composito.
CComCompositeControl::CalcExtent Chiamare questo metodo per calcolare le dimensioni in unità HIMETRIC della risorsa finestra di dialogo usata per ospitare il controllo composito.
CComCompositeControl::Create Questo metodo viene chiamato per creare la finestra di controllo per il controllo composito.
CComCompositeControl::CreateControlWindow Chiamare questo metodo per creare la finestra di controllo e consigliare qualsiasi controllo ospitato.
CComCompositeControl::SetBackgroundColorFromAmbient Chiamare questo metodo per impostare il colore di sfondo del controllo composito usando il colore di sfondo del contenitore.

Membri dati pubblici

Nome Descrizione
CComCompositeControl::m_hbrBackground Pennello di sfondo.
CComCompositeControl::m_hWndFocus Handle della finestra che ha attualmente lo stato attivo.

Osservazioni:

Le classi derivate dalla classe CComCompositeControl ereditano la funzionalità di un controllo composito ActiveX. I controlli ActiveX derivati da CComCompositeControl sono ospitati da una finestra di dialogo standard. Questi tipi di controlli sono chiamati controlli compositi perché sono in grado di ospitare altri controlli (controlli Windows nativi e controlli ActiveX).

CComCompositeControl identifica la risorsa della finestra di dialogo da usare per creare il controllo composito cercando un membro dati enumerato nella classe figlio. L'IDD membro di questa classe figlio viene impostato sull'ID risorsa della risorsa della finestra di dialogo che verrà usata come finestra del controllo. Di seguito è riportato un esempio del membro dati da cui deve essere contenuta la classe derivata CComCompositeControl per identificare la risorsa della finestra di dialogo da usare per la finestra del controllo:

enum { IDD = IDD_MYCOMPOSITE };

Nota

I controlli compositi sono sempre controlli finestrati, anche se possono contenere controlli senza finestra.

Un controllo implementato da una CComCompositeControlclasse derivata da ha un comportamento di tabulazione predefinito incorporato. Quando il controllo riceve lo stato attivo tramite tabulazione in un'applicazione contenitore, premendo il tasto TAB, lo stato attivo verrà scorrere tutti i controlli contenuti del controllo composito, quindi fuori dal controllo composito e dall'elemento successivo nell'ordine di tabulazione del contenitore. L'ordine di tabulazione dei controlli ospitati è determinato dalla risorsa della finestra di dialogo e determina l'ordine in cui verrà eseguita la tabulazione.

Nota

Affinché gli acceleratori funzionino correttamente con un CComCompositeControl, è necessario caricare una tabella di acceleratore durante la creazione del controllo, passare di nuovo l'handle e il numero di acceleratori in IOleControlImpl::GetControlInfo e infine eliminare definitivamente la tabella quando il controllo viene rilasciato.

Esempio

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

Gerarchia di ereditarietà

WinBase

CComControlBase

CComControl

CComCompositeControl

Requisiti

Intestazione: atlctl.h

CComCompositeControl::AdviseSinkMap

Chiamare questo metodo per consigliare o annullare la visualizzazione di tutti i controlli ospitati dal controllo composito.

HRESULT AdviseSinkMap(bool bAdvise);

Parametri

bAdvise
True se tutti i controlli devono essere consigliati; in caso contrario false.

Valore restituito

valore Descrizione
S_OK Tutti i controlli nella mappa del sink eventi sono stati connessi o disconnessi correttamente dall'origine evento.
E_FAIL Non tutti i controlli nella mappa sink eventi potrebbero essere connessi o disconnessi correttamente dall'origine evento.
E_POINTER Questo errore indica in genere un problema relativo a una voce nella mappa sink eventi del controllo o a un problema relativo a un argomento modello usato in una IDispEventImpl classe o IDispEventSimpleImpl di base.
CONNECT_E_ADVISELIMIT Il punto di connessione ha già raggiunto il limite di connessioni e non può più accettare.
CONNECT_E_CANNOTCONNECT Il sink non supporta l'interfaccia richiesta da questo punto di connessione.
CONNECT_E_NOCONNECTION Il valore del cookie non rappresenta una connessione valida. Questo errore indica in genere un problema relativo a una voce nella mappa sink eventi del controllo o a un problema relativo a un argomento modello usato in una IDispEventImpl classe o IDispEventSimpleImpl di base.

Osservazioni:

L'implementazione di base di questo metodo cerca le voci nella mappa sink eventi. Quindi consiglia o annulla la visualizzazione dei punti di connessione agli oggetti COM descritti dalle voci sink della mappa sink dell'evento. Questo metodo membro si basa anche sul fatto che la classe derivata eredita da un'istanza di IDispEventImpl per ogni controllo nella mappa sink che deve essere consigliato o non supervisionato.

CComCompositeControl::CalcExtent

Chiamare questo metodo per calcolare le dimensioni in unità HIMETRIC della risorsa finestra di dialogo usata per ospitare il controllo composito.

BOOL CalcExtent(SIZE& size);

Parametri

size
Riferimento a una SIZE struttura da riempire con questo metodo.

Valore restituito

TRUE se il controllo è ospitato da una finestra di dialogo; in caso contrario FALSE.

Osservazioni:

Le dimensioni vengono restituite nel parametro size .

CComCompositeControl::Create

Questo metodo viene chiamato per creare la finestra di controllo per il controllo composito.

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

Parametri

hWndParent
Handle per la finestra padre del controllo.

rcPos
Riservato.

dwInitParam
Dati da passare al controllo durante la creazione del controllo. I dati passati come dwInitParam verranno visualizzati come parametro LPARAM del messaggio WM_INITDIALOG , che verrà inviato al controllo composito al momento della creazione.

Valore restituito

Handle per la finestra di dialogo del controllo composito appena creato.

Osservazioni:

Questo metodo viene in genere chiamato durante l'attivazione sul posto del controllo .

CComCompositeControl::CComCompositeControl

Costruttore.

CComCompositeControl();

Osservazioni:

Inizializza i membri dati CComCompositeControl::m_hbrBackground e CComCompositeControl::m_hWndFocus su NULL.

CComCompositeControl::~CComCompositeControl

Distruttore.

~CComCompositeControl();

Osservazioni:

Elimina l'oggetto di sfondo, se esistente.

CComCompositeControl::CreateControlWindow

Chiamare questo metodo per creare la finestra di controllo e consigliare eventuali controlli ospitati.

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

Parametri

hWndParent
Handle per la finestra padre del controllo.

rcPos
Rettangolo di posizione del controllo composito nelle coordinate client rispetto a hWndParent.

Valore restituito

Restituisce un handle alla finestra di dialogo del controllo composito appena creato.

Osservazioni:

Questo metodo chiama CComCompositeControl::Create e CComCompositeControl::AdviseSinkMap.

CComCompositeControl::m_hbrBackground

Pennello di sfondo.

HBRUSH m_hbrBackground;

CComCompositeControl::m_hWndFocus

Handle della finestra che ha attualmente lo stato attivo.

HWND m_hWndFocus;

CComCompositeControl::SetBackgroundColorFromAmbient

Chiamare questo metodo per impostare il colore di sfondo del controllo composito usando il colore di sfondo del contenitore.

HRESULT SetBackgroundColorFromAmbient();

Valore restituito

Restituisce S_OK in caso di esito positivo o errore HRESULT in caso di errore.

Vedi anche

Classe CComControl
Nozioni fondamentali sul controllo composito
Cenni preliminari sulla classe