Implementação de objeto de controle
Aplica-se a: Outlook 2013 | Outlook 2016
Objetos de controle ou objetos compatíveis com a interface IMAPIControl : IUnknown são implementados por provedores para adicionar funcionalidade a um botão que aparece em uma caixa de diálogo MAPI. Objetos de controle só podem ser implementados para botões.
O IMAPIControl tem três métodos: GetLastError, GetState e Activate.
MAPI chama GetState para determinar se deve ou não desabilitar o botão. GetState é chamado nas seguintes situações:
Quando a caixa de diálogo na qual o botão aparece é exibida pela primeira vez.
Quando uma notificação de tabela de exibição é emitida para o botão.
Defina o conteúdo do parâmetro lpulState como MAPI_DISABLED se o usuário não puder interagir com o botão e MAPI_ENABLED se o usuário puder interagir.
Quando o usuário clica no botão, MAPI chama Ativar. Ativar executa a tarefa que foi associada ao botão. Essa tarefa pode ser qualquer coisa apropriada para seu provedor, como exibir uma caixa de diálogo ou atualizar uma propriedade. Se a tarefa não tiver êxito porque o usuário a cancelou, retorne MAPI_E_USER_CANCEL. Para outras causas de falha, retorne o valor de erro apropriado.
Se a tarefa for bem-sucedida e estiver vinculada a uma alteração de propriedade refletida em outro controle na caixa de diálogo, chame ITableData::HrNotify. HrNotify é chamado para emitir uma notificação de tabela de exibição com a propriedade PR_CONTROL_ID (PidTagControlId) alterada na estrutura TABLE_NOTIFICATION . Não coloque o novo valor da propriedade na estrutura; Em vez disso, retorne-o quando IMAPIProp::GetProps for chamado. Embora normalmente uma notificação de tabela de exibição não possa ser usada para desabilitar ou habilitar um controle, ela pode ser usada com um botão. O MAPI atualizará o controle alterado para responder à notificação.
MAPI chama o método GetLastError do controle quando Ativar retorna um erro diferente de MAPI_E_USER_CANCEL. Se GetLastError colocar informações de erro estendidas na estrutura MAPIERROR que ela retorna no conteúdo do parâmetro the_lppMAPIError_, o MAPI as exibirá para o usuário.