Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
Gerir a concorrência exigida pela interação das aplicações OLE.
Sintaxe
class COleMessageFilter : public CCmdTarget
Membros
Construtores Públicos
| Nome | Description |
|---|---|
| COleMessageFilter::COleMessageFilter | Constrói um COleMessageFilter objeto. |
Métodos Públicos
| Nome | Description |
|---|---|
| COleMessageFilter::BeginBusyState | Coloca a candidatura num estado de ocupação. |
| COleMessageFilter::EnableBusyDialog | Ativa e desativa a caixa de diálogo que aparece quando uma aplicação chamada está ocupada. |
| COleMessageFilter::EnableNotRespondingDialog | Ativa e desativa a caixa de diálogo que aparece quando uma aplicação chamada não responde. |
| COleMessageFilter::EndBusyState | Termina o estado ocupado da aplicação. |
| COleMessageFilter::OnMessagePending | Chamado pelo framework para processar mensagens enquanto uma chamada OLE está em curso. |
| COleMessageFilter::Registar | Regista o filtro de mensagens com as DLLs do sistema OLE. |
| COleMessageFilter::Revoke | Revoga o registo do filtro de mensagens com as DLLs do sistema OLE. |
| COleMessageFilter::SetBusyReply | Determina a resposta da aplicação ocupada a uma chamada do OLE. |
| FiltroMensagem::DefinirMensagemAtrasoPendenteAtraso | Determina quanto tempo a candidatura espera por uma resposta a uma chamada do OLE. |
| COleMessageFilter::SetRetryReply | Determina a resposta da aplicação que chama a uma aplicação ocupada. |
Observações
A COleMessageFilter classe é útil em edição visual de servidores e aplicações de contentores, bem como em aplicações de automação OLE. Para aplicações servidor que estão a ser chamadas, esta classe pode ser usada para tornar a aplicação "ocupada", de modo a que as chamadas recebidas de outras aplicações contentores sejam canceladas ou retentadas mais tarde. Esta classe também pode ser usada para determinar a ação a realizar por uma aplicação chamada quando a aplicação chamada está ocupada.
O uso comum é que uma aplicação servidor chame BeginBusyState e EndBusyState quando seria perigoso que um documento ou outro objeto acessível OLE fosse destruído. Estas chamadas são feitas em CWinApp::OnIdle durante as atualizações da interface de utilizador.
Por defeito, um COleMessageFilter objeto é alocado quando a aplicação é inicializada. Pode ser recuperado com AfxOleGetMessageFilter.
Esta é uma disciplina avançada; raramente é preciso trabalhar diretamente com ela.
Para mais informações, consulte o artigo Servidores: Implementar um Servidor.
Hierarquia de herança
COleMessageFilter
Requerimentos
Cabeçalho: afxole.h
COleMessageFilter::BeginBusyState
Chame esta função para iniciar um estado ocupado.
virtual void BeginBusyState();
Observações
Funciona em conjunto com o EndBusyState para controlar o estado ocupado da aplicação. A função SetBusyReply determina a resposta da aplicação às aplicações a chamar quando está ocupada.
As BeginBusyState chamadas e EndBusyState incrementam e decrementam, respetivamente, um contador que determina se a aplicação está ocupada. Por exemplo, duas chamadas para BeginBusyState e uma chamada para EndBusyState continuar a resultar num estado ocupado. Para cancelar um estado ocupado, é necessário ligar EndBusyState o mesmo número de vezes BeginBusyState que foi chamado.
Por defeito, o framework entra no estado ocupado durante o processamento inativo, que é realizado pelo CWinApp::OnIdle. Enquanto a aplicação está a tratar de notificações ON_COMMANDUPDATEUI, as chamadas recebidas são tratadas mais tarde, após o processamento inativo estar concluído.
COleMessageFilter::COleMessageFilter
Cria um COleMessageFilter objeto.
COleMessageFilter();
COleMessageFilter::EnableBusyDialog
Ativa e desativa a caixa de diálogo ocupada, que é exibida quando o atraso da mensagem pendente expira (ver SetRetryReply) durante uma chamada OLE.
void EnableBusyDialog(BOOL bEnableBusy = TRUE);
Parâmetros
bEnableBusy
Especifica se a caixa de diálogo "ocupado" está ativada ou desativada.
COleMessageFilter::EnableNotRespondingDialog
Ativa e desativa a caixa de diálogo "não responde", que é exibida se uma mensagem de teclado ou rato estiver pendente durante uma chamada OLE e a chamada tiver expirado.
void EnableNotRespondingDialog(BOOL bEnableNotResponding = TRUE);
Parâmetros
bEncapacitNãoA Responder
Especifica se a caixa de diálogo "não responde" está ativada ou desativada.
COleMessageFilter::EndBusyState
Chama esta função para terminar um estado ocupado.
virtual void EndBusyState();
Observações
Funciona em conjunto com o BeginBusyState para controlar o estado ocupado da aplicação. A função SetBusyReply determina a resposta da aplicação às aplicações a chamar quando está ocupada.
As BeginBusyState chamadas e EndBusyState incrementam e decrementam, respetivamente, um contador que determina se a aplicação está ocupada. Por exemplo, duas chamadas para BeginBusyState e uma chamada para EndBusyState continuar a resultar num estado ocupado. Para cancelar um estado ocupado, é necessário ligar EndBusyState o mesmo número de vezes BeginBusyState que foi chamado.
Por defeito, o framework entra no estado ocupado durante o processamento inativo, que é realizado pelo CWinApp::OnIdle. Enquanto a aplicação está a tratar ON_UPDATE_COMMAND_UI notificações, as chamadas recebidas são tratadas após o processamento inativo estar concluído.
COleMessageFilter::OnMessagePending
Chamado pelo framework para processar mensagens enquanto uma chamada OLE está em curso.
virtual BOOL OnMessagePending(const MSG* pMsg);
Parâmetros
pMsg
Apontar para a mensagem pendente.
Valor de retorno
Não-zero em termos de sucesso; caso contrário, 0.
Observações
Quando uma aplicação que chama está à espera de uma chamada a ser concluída, o framework chama OnMessagePending com um ponteiro para a mensagem pendente. Por defeito, o framework despacha WM_PAINT mensagens, permitindo que atualizações de janelas ocorram durante uma chamada que demora muito tempo.
Deve registar o seu filtro de mensagens através de uma chamada para Registar antes de se tornar ativo.
COleMessageFilter::Registar
Regista o filtro de mensagens com as DLLs do sistema OLE.
BOOL Register();
Valor de retorno
Não-zero em termos de sucesso; caso contrário, 0.
Observações
Um filtro de mensagens não tem efeito a menos que esteja registado nas DLLs do sistema. Normalmente, o código de inicialização da sua aplicação regista o filtro de mensagens da aplicação. Qualquer outro filtro de mensagens registado pela sua candidatura deve ser revogado antes de o programa terminar, através de uma chamada para o Revoke.
O filtro de mensagens predefinido do framework é automaticamente registado durante a inicialização e revogado na terminação.
COleMessageFilter::Revoke
Revoga um registo anterior realizado através de uma chamada para Registo.
void Revoke();
Observações
Um filtro de mensagem deve ser revogado antes do programa terminar.
O filtro de mensagens predefinido, que é criado e registado automaticamente pelo framework, também é automaticamente revogado.
COleMessageFilter::SetBusyReply
Esta função define a "resposta ocupada" da aplicação.
void SetBusyReply(SERVERCALL nBusyReply);
Parâmetros
nBusyReply
Um valor da SERVERCALL enumeração, que está definido em COMPOBJ.H. Pode ter qualquer um dos seguintes valores:
SERVERCALL_ISHANDLED A aplicação pode aceitar chamadas, mas pode falhar no processamento de uma chamada específica.
SERVERCALL_REJECTED A candidatura provavelmente nunca conseguirá processar uma chamada.
SERVERCALL_RETRYLATER A aplicação encontra-se temporariamente num estado em que não pode processar uma chamada.
Observações
As funções BeginBusyState e EndBusyState controlam o estado ocupado da aplicação.
Quando uma aplicação está ocupada com uma chamada para BeginBusyState, responde a chamadas das DLLs do sistema OLE com um valor determinado pela última definição de SetBusyReply. A aplicação que chama usa esta resposta ocupada para determinar que ação tomar.
Por defeito, a resposta ocupada é SERVERCALL_RETRYLATER. Esta resposta faz com que a aplicação que chama tente novamente a chamada o mais rapidamente possível.
FiltroMensagem::DefinirMensagemAtrasoPendenteAtraso
Determina quanto tempo a aplicação chamadora espera por uma resposta da aplicação chamada antes de tomar mais ação.
void SetMessagePendingDelay(DWORD nTimeout = 5000);
Parâmetros
nTimeout
Número de milissegundos para o atraso da mensagem pendente.
Observações
Esta função funciona em conjunto com o SetRetryReply.
COleMessageFilter::SetRetryReply
Determina a ação da aplicação chamadora quando recebe uma resposta ocupada de uma aplicação chamada.
void SetRetryReply(DWORD nRetryReply = 0);
Parâmetros
nRetryReply
Número de milissegundos entre tentativas.
Observações
Quando uma aplicação chamada indica que está ocupada, a aplicação chamada pode decidir esperar até que o servidor deixe de estar ocupado, tentar novamente imediatamente ou tentar novamente após um intervalo especificado. Também pode decidir cancelar a chamada por completo.
A resposta do chamador é controlada pelas funções SetRetryReply e pelo SetMessagePendingDelay.
SetRetryReply determina quanto tempo a aplicação de chamada deve esperar entre tentativas para uma dada chamada.
SetMessagePendingDelay determina quanto tempo a aplicação chamadora espera por uma resposta do servidor antes de tomar mais medidas.
Normalmente, os padrões são aceitáveis e não precisam de ser alterados. O framework tenta novamente a chamada a cada nRetryReply milissegundos até que a chamada seja concluída ou até o atraso da mensagem pendente expirar. Um valor de 0 para nRetryReply especifica uma retentativa imediata, e - 1 indica o cancelamento da chamada.
Quando o atraso de mensagem pendente expira, a OLE "caixa de diálogo ocupada" (ver COleBusyDialog) é exibida para que o utilizador possa escolher cancelar ou tentar novamente a chamada. Ligue para o EnableBusyDialog para ativar ou desativar esta caixa de diálogo.
Quando uma mensagem de teclado ou rato está pendente durante uma chamada e esta terminou o tempo de espera (excedeu o atraso de mensagem pendente), é exibida a caixa de diálogo "não responde". Ligue para o EnableNotRespondingDialog para ativar ou desativar esta caixa de diálogo. Normalmente, esta situação indica que algo correu mal e que o utilizador está a ficar impaciente.
Quando os diálogos estão desativados, a atual "resposta de tentativa" é sempre usada para chamadas a aplicações ocupadas.