Classe CComControl

Questa classe fornisce metodi per la creazione e la gestione di controlli ATL.

Importante

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

Sintassi

template <class T, class WinBase = CWindowImpl<T>>
class ATL_NO_VTABLE CComControl : public CComControlBase,
    public WinBase;

Parametri

T
Classe che implementa il controllo.

WinBase
Classe di base che implementa le funzioni di windowing. L'impostazione predefinita è CWindowImpl.

Membri

Costruttori pubblici

Nome Descrizione
CComControl::CComControl Costruttore.

Metodi pubblici

Nome Descrizione
CComControl::ControlQueryInterface Recupera un puntatore all'interfaccia richiesta.
CComControl::CreateControlWindow Crea una finestra per il controllo .
CComControl::FireOnChanged Notifica al sink del contenitore che una proprietà del controllo è stata modificata.
CComControl::FireOnRequestEdit Notifica al sink del contenitore che una proprietà di controllo sta per modificare e che l'oggetto chiede al sink come procedere.
CComControl::MessageBox Chiamare questo metodo per creare, visualizzare e gestire una finestra di messaggio.

Osservazioni:

CComControl è un set di funzioni helper di controllo utili e membri dati essenziali per i controlli ATL. Quando si crea un controllo standard o un controllo DHTML tramite la Creazione guidata controllo ATL, la procedura guidata deriva automaticamente la classe da CComControl. CComControl deriva la maggior parte dei relativi metodi da CComControlBase.

Per altre informazioni sulla creazione di un controllo, vedere l'esercitazione su ATL. Per altre informazioni sulla Creazione guidata progetto ATL, vedere l'articolo Creazione di un progetto ATL.

Per una dimostrazione di CComControl metodi e membri dati, vedere l'esempio CIRC .

Gerarchia di ereditarietà

WinBase

CComControlBase

CComControl

Requisiti

Intestazione: atlctl.h

CComControl::CComControl

Costruttore.

CComControl();

Osservazioni:

Chiama il costruttore CComControlBase , passando il m_hWnd membro dati ereditato tramite CWindowImpl.

CComControl::ControlQueryInterface

Recupera un puntatore all'interfaccia richiesta.

virtual HRESULT ControlQueryInterface(const IID& iid, void** ppv);

Parametri

iid
[in] GUID dell'interfaccia richiesta.

ppv
[out] Puntatore al puntatore dell'interfaccia identificato da iid o NULL se l'interfaccia non viene trovata.

Osservazioni:

Gestisce solo le interfacce nella tabella mappa COM.

Esempio

// Retrieve the control's IOleObject interface. Note interface 
// is automatically released when pOleObject goes out of scope

CComPtr<IOleObject> pOleObject;
ControlQueryInterface(IID_IOleObject, (void**)&pOleObject);

CComControl::CreateControlWindow

Per impostazione predefinita, crea una finestra per il controllo chiamando CWindowImpl::Create.

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

Parametri

hWndParent
[in] Handle nella finestra padre o proprietario. È necessario specificare un handle di finestra valido. La finestra di controllo è limitata all'area della finestra padre.

rcPos
[in] Dimensioni iniziali e posizione della finestra da creare.

Osservazioni:

Eseguire l'override di questo metodo se si desidera eseguire operazioni diverse da creare una singola finestra, ad esempio per creare due finestre, una delle quali diventa una barra degli strumenti per il controllo.

Esempio

RECT rc = {10,10,210,110};
HWND hwndParent, hwndControl;

// get HWND of control's parent window from IOleInPlaceSite interface
m_spInPlaceSite->GetWindow(&hwndParent);
hwndControl = CreateControlWindow(hwndParent, rc);

CComControl::FireOnChanged

Notifica al sink del contenitore che una proprietà del controllo è stata modificata.

HRESULT FireOnChanged(DISPID dispID);

Parametri

dispID
[in] Identificatore della proprietà modificata.

Valore restituito

Uno dei valori HRESULT standard.

Osservazioni:

Se la classe del controllo deriva da IPropertyNotifySink, questo metodo chiama CFirePropNotifyEvent::FireOnChanged per notificare a tutte le interfacce connesse IPropertyNotifySink che la proprietà del controllo specificata è stata modificata. Se la classe di controllo non deriva da IPropertyNotifySink, questo metodo restituisce S_OK.

Questo metodo è sicuro da chiamare anche se il controllo non supporta i punti di connessione.

Esempio

STDMETHODIMP CMyControl::put_MyText(BSTR newVal)
{
   // store newVal in CComBstr member
   m_bstrMyText = newVal;

   // note the DISPID for the MyText property is 3 in this example
   FireOnChanged(3);

   return S_OK;
}

CComControl::FireOnRequestEdit

Notifica al sink del contenitore che una proprietà di controllo sta per modificare e che l'oggetto chiede al sink come procedere.

HRESULT FireOnRequestEdit(DISPID dispID);

Parametri

dispID
[in] Identificatore della proprietà che sta per cambiare.

Valore restituito

Uno dei valori HRESULT standard.

Osservazioni:

Se la classe di controllo deriva da IPropertyNotifySink, questo metodo chiama CFirePropNotifyEvent::FireOnRequestEdit per notificare a tutte le interfacce connesse IPropertyNotifySink che la proprietà del controllo specificata sta per essere modificata. Se la classe di controllo non deriva da IPropertyNotifySink, questo metodo restituisce S_OK.

Questo metodo è sicuro da chiamare anche se il controllo non supporta i punti di connessione.

Esempio

STDMETHODIMP CMyControl::put_MyTitle(BSTR newVal)
{
   // the DISPID for MyTitle in this example is 4
   DISPID dispID = 4;

   // make sure we can change the property
   if (FireOnRequestEdit(dispID) == S_FALSE)
      return S_FALSE;

   // store newVal in CComBstr member
   m_bstrMyTitle = newVal;

   // signal that the property has been changed
   FireOnChanged(dispID);

   return S_OK;
}

CComControl::MessageBox

Chiamare questo metodo per creare, visualizzare e gestire una finestra di messaggio.

int MessageBox(
    LPCTSTR lpszText,
    LPCTSTR lpszCaption = _T(""),
    UINT nType = MB_OK);

Parametri

lpszText
Testo da visualizzare nella finestra di messaggio.

lpszCaption
Titolo della finestra di dialogo. Se NULL (impostazione predefinita), viene usato il titolo "Error".

nType
Specifica il contenuto e il comportamento della finestra di dialogo. Per un elenco delle diverse finestre di messaggio disponibili, vedere la voce MessageBox nella documentazione di Windows SDK. Il valore predefinito fornisce un semplice pulsante OK .

Valore restituito

Restituisce un valore intero che specifica uno dei valori delle voci di menu elencate in MessageBox nella documentazione di Windows SDK.

Osservazioni:

MessageBox è utile sia durante lo sviluppo che come modo semplice per visualizzare un messaggio di errore o di avviso all'utente.

Vedi anche

Classe CWindowImpl
Cenni preliminari sulla classe
Classe CComControlBase
Classe CComCompositeControl