Macros do mapa de propriedades

Essas macros definem mapas de propriedades e entradas.

Nome Descrição
BEGIN_PROP_MAP Marca o início do mapa da propriedade da ATL.
PROP_DATA_ENTRY Indica a extensão, ou dimensões, de um controle ActiveX.
PROP_ENTRY_TYPE Insere uma descrição da propriedade, um DISPID de propriedade e uma página de propriedades CLSID no mapa de propriedades.
PROP_ENTRY_TYPE_EX Insere uma descrição da propriedade, um DISPID de propriedade, uma página de propriedades CLSID e um IID IDispatch no mapa de propriedades.
PROP_PAGE Insere uma página de propriedades CLSID no mapa de propriedades.
END_PROP_MAP Marca o final do mapa da propriedade da ATL.

Requisitos

Cabeçalho: atlcom.h

BEGIN_PROP_MAP

Marca o início do mapa da propriedade do objeto.

BEGIN_PROP_MAP(theClass)

Parâmetros

theClass
[in] Especifica a classe que contém o mapa de propriedades.

Comentários

O mapa de propriedades armazena descrições de propriedade, DISPIDs de propriedade, CLSIDs da página de propriedades e IIDs IDispatch. As classes IPerPropertyBrowsingImpl, IPersistPropertyBagImpl, IPersistStreamInitImpl e ISpecifyPropertyPagesImpl usam o mapa de propriedades para recuperar e definir essas informações.

Quando você cria um objeto com o Assistente de Projetos da ATL, o assistente cria um mapa de propriedades vazio especificando BEGIN_PROP_MAP seguido por END_PROP_MAP.

BEGIN_PROP_MAP não salva a extensão (ou seja, as dimensões) de um mapa de propriedades, pois um objeto que usa um mapa de propriedades pode não ter uma interface do usuário, portanto, não teria nenhuma extensão. Se o objeto for um controle ActiveX com uma interface do usuário, ele terá uma extensão. Nesse caso, você deve especificar PROP_DATA_ENTRY no mapa de propriedades para fornecer a extensão.

Exemplo

BEGIN_PROP_MAP(CMyPropCtrl)
   PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
   PROP_ENTRY_TYPE("Property1", 1, CLSID_MyPropPage1, VT_BSTR)
   PROP_ENTRY_TYPE_EX("Caption", DISPID_CAPTION, CLSID_MyPropPage2, IID_IMyDual1, VT_BSTR)
   PROP_ENTRY_INTERFACE_CALLBACK("CorrectParamCallback", 0, CLSID_MyPropPage1, AllowedCLSID, VT_DISPATCH)
   PROP_ENTRY_INTERFACE_CALLBACK_EX("CorrectParamCallbackEx", 1, IID_IMyDual1, CLSID_MyPropPage2, AllowedCLSID, VT_UNKNOWN)
   PROP_PAGE(CLSID_MyPropPage3)
END_PROP_MAP()

PROP_DATA_ENTRY

Indica a extensão, ou dimensões, de um controle ActiveX.

PROP_DATA_ENTRY( szDesc, member, vt)

Parâmetros

szDesc
[in] A descrição da propriedade.

member
[in] O membro de dados que contém a extensão. Por exemplo, m_sizeExtent.

Vt
[in] Especifica o tipo VARIANT da propriedade.

Comentários

Essa macro faz com que o membro de dados especificado seja persistido.

Quando você cria um controle ActiveX, o assistente insere essa macro após a macro do mapa de propriedades BEGIN_PROP_MAP e antes da macro do mapa de propriedades END_PROP_MAP.

Exemplo

No exemplo a seguir, a extensão do objeto (m_sizeExtent) está sendo persistente.

BEGIN_PROP_MAP(CMyWindow)
   PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
END_PROP_MAP()

 

BEGIN_PROP_MAP(CMyCompositeCtrl)
   PROP_DATA_ENTRY("Width", m_nWidth, VT_UI4)
   PROP_DATA_ENTRY("Height", m_nHeight, VT_UI4)
END_PROP_MAP()

PROP_ENTRY_TYPE

Use essa macro para inserir uma descrição da propriedade, um DISPID de propriedade e uma página de propriedades CLSID no mapa de propriedades do objeto.

PROP_ENTRY_TYPE( szDesc, dispid, clsid, vt)

Parâmetros

szDesc
[in] A descrição da propriedade.

dispid
[in] O DISPID da propriedade.

clsid
[in] O CLSID da página de propriedades associada. Use o valor especial CLSID_NULL para uma propriedade que não tenha uma página de propriedades associada.

Vt
[in] O tipo da propriedade.

Comentários

A macro PROP_ENTRY era insegura e foi preterida. Ela foi substituída por PROP_ENTRY_TYPE.

A macro BEGIN_PROP_MAP marca o início do mapa de propriedades. A macro END_PROP_MAP marca o final.

Exemplo

Consulte o exemplo para BEGIN_PROP_MAP.

PROP_ENTRY_TYPE_EX

Semelhante a PROP_ENTRY_TYPE, mas permite que você especifique um IID específico se o objeto der suporte a várias interfaces duplas.

PROP_ENTRY_TYPE_EX( szDesc, dispid, clsid, iidDispatch, vt)

Parâmetros

szDesc
[in] A descrição da propriedade.

dispid
[in] O DISPID da propriedade.

clsid
[in] O CLSID da página de propriedades associada. Use o valor especial CLSID_NULL para uma propriedade que não tenha uma página de propriedades associada.

iidDispatch
[in] O IID da interface dupla que define a propriedade.

Vt
[in] O tipo da propriedade.

Comentários

A macro PROP_ENTRY_EX era insegura e foi preterida. Ela foi substituída por PROP_ENTRY_TYPE_EX.

A macro BEGIN_PROP_MAP marca o início do mapa de propriedades. A macro END_PROP_MAP marca o final.

Exemplo

O exemplo a seguir agrupa entradas para IMyDual1 seguidas de uma entrada para IMyDual2. O agrupamento por interface dupla aprimorará o desempenho.

BEGIN_PROP_MAP(CAtlEdit)
   PROP_ENTRY_TYPE_EX("Caption", DISPID_CAPTION, CLSID_MyPropPage2, IID_IMyDual1, VT_BSTR)
   PROP_ENTRY_TYPE_EX("Enabled", DISPID_ENABLED, CLSID_MyPropPage2, IID_IMyDual1, VT_BOOL)
   PROP_ENTRY_TYPE_EX("Width", DISPID_DRAWWIDTH, CLSID_MyPropPage2, IID_IMyDual2, VT_UINT)
END_PROP_MAP()

PROP_PAGE

Use essa macro para inserir uma página de propriedades CLSID no mapa de propriedades do objeto.

PROP_PAGE(clsid)

Parâmetros

clsid
[in] O CLSID de uma página de propriedades.

Comentários

PROP_PAGE é semelhante a PROP_ENTRY_TYPE, mas não requer uma descrição de propriedade ou DISPID.

Observação

Se você já tiver inserido um CLSID com PROP_ENTRY_TYPE ou PROP_ENTRY_TYPE_EX, não precisará fazer uma entrada adicional com PROP_PAGE.

A macro BEGIN_PROP_MAP marca o início do mapa de propriedades. A macro END_PROP_MAP marca o final.

Exemplo

BEGIN_PROP_MAP(CMyCtrl)
   OtherPropMapEntries
   PROP_PAGE(CLSID_DatePage)
   PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

END_PROP_MAP

Marca o final do mapa de propriedades do objeto.

END_PROP_MAP()

Comentários

Quando você cria um objeto com o Assistente de Projetos da ATL, o assistente cria um mapa de propriedades vazio especificando BEGIN_PROP_MAP seguido por END_PROP_MAP.

Exemplo

Consulte o exemplo para BEGIN_PROP_MAP.

Confira também

Macros