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.