Controles ActiveX MFC: implementação da propriedade avançada
Este artigo descreve os tópicos relacionados ao implementar propriedades avançadas em um controle ActiveX:
Propriedades somente leitura e somente gravação
Retornando códigos de erro de uma propriedade
Propriedades somente leitura e somente gravação
O assistente para adicionar a propriedade fornece um método rápido e fácil implementar propriedades somente leitura ou somente gravação para o controle.
Para implementar uma propriedade somente leitura ou somente gravação
Carregar o projeto do controle.
Na exibição da classe, expanda o nó da biblioteca do controle.
Clique com o botão direito do mouse no nó da interface para o controle (o segundo nó do nó da biblioteca) para abrir o menu de atalho.
No menu de atalho, clique Adicionar e clique em Adicionar Propriedade.
Isso abre Assistente de adição de propriedade.
Na caixa de Nome da propriedade , digite o nome da propriedade.
Para Tipo de Implementação, clique Get/Set Methods.
Na caixa de Tipo de propriedade , selecione o tipo apropriado para a propriedade.
Se você quiser uma propriedade somente leitura, desmarque o nome da função de conjunto. Se você quiser uma propriedade somente gravação, desmarque o nome da função ser obtido.
Clique em Concluir.
Quando você fizer isso, o assistente da propriedade adicionar insere a função SetNotSupported ou GetNotSupported na entrada do mapa de distribuição no lugar de um conjunto comum ou define a função.
Se você quiser alterar uma propriedade existente para ser somente leitura ou somente gravação, você pode editar o mapa de expedição manualmente e remover o conjunto desnecessários ou obter a função da classe do controle.
Se você quiser uma propriedade para ser condicional somente leitura ou somente gravação (por exemplo, somente quando o controle operar em um modo específico), você pode fornecer o conjunto ou obter a função, como normal, e chama a função de SetNotSupported ou de GetNotSupported onde apropriado. Por exemplo:
void CMyAxUICtrl::SetMyProperty(SHORT newVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (m_bReadOnlyMode) // some control-specific state
{
SetNotSupported();
}
else
{
m_iPropVal = newVal; // set property as normal
SetModifiedFlag();
}
}
Este exemplo de código a seguir chama SetNotSupported se o membro de dados de m_bReadOnlyMode é Verdadeiro. Se Falso, a propriedade é definida no novo valor.
Retornando códigos de erro de uma propriedade
Para indicar que ocorreu um erro ao tentar obter ou definir uma propriedade, use a função de COleControl::ThrowError , que usa SCODE (código de status) como um parâmetro. Você pode usar SCODE predefinido ou definir um de seus próprios. Para obter uma lista de SCODEpredefinido s as instruções e para definir SCODEpersonalizado s, consulte Tratar erros no controle ActiveX nos controles ActiveX de artigo: Tópicos avançados.
As funções auxiliares existem para a maioria de SCODEpredefinido comum s, como COleControl::SetNotSupported, COleControl::GetNotSupported, e COleControl::SetNotPermitted.
Dica
ThrowError parece ser usado apenas como meio de retornar um erro de uma propriedade obtém ou define a função ou um método de automação.Esses são os únicos hora em que o manipulador de exceção apropriada estiver presente na pilha.
Para obter mais informações sobre as exceções de relatório em outras áreas de código, consulte COleControl::FireError e a seção Tratar erros no controle ActiveX nos controles ActiveX de artigo: Tópicos avançados.