Partilhar via


Classe CComControl

Essa classe fornece métodos para criar e gerenciar controles da ATL.

Importante

Essa classe e os respectivos membros não podem ser usados em aplicativos executados no Windows Runtime.

Sintaxe

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

Parâmetros

T
A classe que implementa o controle.

WinBase
A classe base que implementa funções de janela. O padrão é CWindowImpl.

Membros

Construtores públicos

Nome Descrição
CComControl::CComControl Construtor.

Métodos públicos

Nome Descrição
CComControl::ControlQueryInterface Recupera um ponteiro para a interface solicitada.
CComControl::CreateControlWindow Cria uma janela para o controle.
CComControl::FireOnChanged Notifica o coletor do contêiner que uma propriedade de controle foi alterada.
CComControl::FireOnRequestEdit Notifica o coletor do contêiner de que uma propriedade de controle está prestes a ser alterada e que o objeto está perguntando ao coletor como proceder.
CComControl::MessageBox Chame esse método para criar, exibir e operar uma caixa de mensagem.

Comentários

CComControl é um conjunto útil de funções auxiliares de controle e membros de dados essenciais para controles da ATL. Quando você cria um controle padrão ou um controle DHTML usando o Assistente de Controle de ATL, o assistente derivará automaticamente sua classe de CComControl. CComControl deriva a maioria de seus métodos de CComControlBase.

Para obter mais informações sobre como criar um controle, consulte o Tutorial da ATL. Para obter mais informações sobre o Assistente de Projeto da ATL, confira o artigo Criar um projeto da ATL.

Para uma demonstração de métodos CComControl e membros de dados, consulte o exemplo CIRC.

Hierarquia de herança

WinBase

CComControlBase

CComControl

Requisitos

Cabeçalho: atlctl.h

CComControl::CComControl

O construtor .

CComControl();

Comentários

Chama o construtor CComControlBase, passando o membro de dados m_hWnd herdado por meio de CWindowImpl.

CComControl::ControlQueryInterface

Recupera um ponteiro para a interface solicitada.

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

Parâmetros

iid
[in] O GUID da interface que está sendo solicitado.

ppv
[out] Um ponteiro para o ponteiro de interface identificado por iid ou NULL se a interface não for encontrada.

Comentários

Somente lida com interfaces na tabela de mapa COM.

Exemplo

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

Por padrão, cria uma janela para o controle chamando CWindowImpl::Create.

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

Parâmetros

hWndParent
[entrada] Identificador para a janela pai ou proprietária. Um identificador de janela válido deve ser fornecido. A janela de controle está limitada à área de sua janela pai.

rcPos
[entrada] O tamanho inicial e a posição da janela a ser criada.

Comentários

Substitua esse método se você quiser fazer algo diferente de criar uma única janela, por exemplo, para criar duas janelas sendo que uma das quais se torna uma barra de ferramentas para seu controle.

Exemplo

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 o coletor do contêiner que uma propriedade de controle foi alterada.

HRESULT FireOnChanged(DISPID dispID);

Parâmetros

dispID
[entrada] O identificador da propriedade que foi modificada.

Valor de retorno

Um dos valores HRESULT padrão.

Comentários

Se a classe de controle derivar de IPropertyNotifySink, esse método chamará CFirePropNotifyEvent::FireOnChanged para notificar todas as interfaces IPropertyNotifySink conectadas de que a propriedade de controle especificada foi alterada. Se a classe de controle não derivar de IPropertyNotifySink, esse método retornará S_OK.

Esse método é seguro para chamar mesmo que seu controle não dê suporte a pontos de conexão.

Exemplo

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 o coletor do contêiner de que uma propriedade de controle está prestes a ser alterada e que o objeto está perguntando ao coletor como proceder.

HRESULT FireOnRequestEdit(DISPID dispID);

Parâmetros

dispID
[entrada] Identificador da propriedade prestes a ser alterada.

Valor de retorno

Um dos valores HRESULT padrão.

Comentários

Se a classe de controle derivar de IPropertyNotifySink, esse método chamará CFirePropNotifyEvent::FireOnRequestEdit para notificar todas as interfaces IPropertyNotifySink conectadas de que a propriedade de controle especificada está prestes a ser alterada. Se a classe de controle não derivar de IPropertyNotifySink, esse método retornará S_OK.

Esse método é seguro para chamar mesmo que seu controle não dê suporte a pontos de conexão.

Exemplo

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

Chame esse método para criar, exibir e operar uma caixa de mensagem.

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

Parâmetros

lpszTexto
O texto a ser exibido na caixa de mensagem.

lpszCaption
O título da caixa de diálogo. Se NULL (o padrão), o título "Erro" será usado.

nType
Especifica o conteúdo e o comportamento da caixa de diálogo. Consulte a entrada MessageBox na documentação do SDK do Windows para obter uma lista das diferentes caixas de mensagem disponíveis. O padrão fornece um botão OK simples.

Valor de retorno

Retorna um valor inteiro especificando um dos valores de item de menu listados em MessageBox na documentação do SDK do Windows.

Comentários

MessageBox é útil durante o desenvolvimento e como uma maneira fácil de exibir uma mensagem de erro ou aviso para o usuário.

Confira também

Classe CWindowImpl
Visão geral da aula
Classe CComControlBase
Classe CComCompositeControl