Condividi tramite


Classe COleMessageFilter

Gestisce la concorrenza richiesta dall'interazione delle applicazioni OLE.

Sintassi

class COleMessageFilter : public CCmdTarget

Membri

Costruttori pubblici

Nome Descrizione
COleMessageFilter::COleMessageFilter Costruisce un oggetto COleMessageFilter.

Metodi pubblici

Nome Descrizione
COleMessageFilter::BeginBusyState Inserisce l'applicazione nello stato occupato.
COleMessageFilter::EnableBusyDialog Abilita e disabilita la finestra di dialogo visualizzata quando un'applicazione chiamata è occupata.
COleMessageFilter::EnableNotRespondingDialog Abilita e disabilita la finestra di dialogo visualizzata quando un'applicazione chiamata non risponde.
COleMessageFilter::EndBusyState Termina lo stato occupato dell'applicazione.
COleMessageFilter::OnMessagePending Chiamato dal framework per elaborare i messaggi mentre è in corso una chiamata OLE.
COleMessageFilter::Register Registra il filtro dei messaggi con le DLL di sistema OLE.
COleMessageFilter::Revoke Revoca la registrazione del filtro messaggi con le DLL di sistema OLE.
COleMessageFilter::SetBusyReply Determina la risposta dell'applicazione occupata a una chiamata OLE.
COleMessageFilter::SetMessagePendingDelay Determina per quanto tempo l'applicazione attende una risposta a una chiamata OLE.
COleMessageFilter::SetRetryReply Determina la risposta dell'applicazione chiamante a un'applicazione occupata.

Osservazioni:

La COleMessageFilter classe è utile per la modifica visiva di applicazioni server e contenitori, nonché per le applicazioni di automazione OLE. Per le applicazioni server chiamate, questa classe può essere usata per rendere l'applicazione "occupato" in modo che le chiamate in ingresso da altre applicazioni contenitore vengano annullate o ritentate in un secondo momento. Questa classe può essere usata anche per determinare l'azione da eseguire da un'applicazione chiamante quando l'applicazione chiamata è occupata.

L'utilizzo comune è che un'applicazione server chiami BeginBusyState e EndBusyState quando potrebbe essere pericoloso per un documento o un altro oggetto accessibile OLE da eliminare definitivamente. Queste chiamate vengono effettuate in CWinApp::OnIdle durante gli aggiornamenti dell'interfaccia utente.

Per impostazione predefinita, un COleMessageFilter oggetto viene allocato quando l'applicazione viene inizializzata. Può essere recuperato con AfxOleGetMessageFilter.

Questa è una classe avanzata; raramente è necessario lavorare direttamente con esso.

Per altre informazioni, vedere l'articolo Server: Implementazione di un server.

Gerarchia di ereditarietà

CObject

CCmdTarget

COleMessageFilter

Requisiti

Intestazione: afxole.h

COleMessageFilter::BeginBusyState

Chiamare questa funzione per iniziare uno stato occupato.

virtual void BeginBusyState();

Osservazioni:

Funziona insieme a EndBusyState per controllare lo stato occupato dell'applicazione. La funzione SetBusyReply determina la risposta dell'applicazione alla chiamata di applicazioni quando è occupato.

Il BeginBusyState e EndBusyState chiama rispettivamente incremento e decremento, un contatore che determina se l'applicazione è occupata. Ad esempio, due chiamate a BeginBusyState e una chiamata a comportano EndBusyState comunque uno stato occupato. Per annullare uno stato occupato, è necessario chiamare EndBusyState lo stesso numero di chiamate BeginBusyState .

Per impostazione predefinita, il framework entra nello stato occupato durante l'elaborazione inattiva, che viene eseguito da CWinApp::OnIdle. Mentre l'applicazione gestisce ON_COMMANDUPDATEUI notifiche, le chiamate in ingresso vengono gestite in un secondo momento, dopo il completamento dell'elaborazione inattiva.

COleMessageFilter::COleMessageFilter

Crea un oggetto COleMessageFilter.

COleMessageFilter();

COleMessageFilter::EnableBusyDialog

Abilita e disabilita la finestra di dialogo occupato, visualizzata alla scadenza del ritardo in sospeso del messaggio (vedere SetRetryReply) durante una chiamata OLE.

void EnableBusyDialog(BOOL bEnableBusy = TRUE);

Parametri

bEnableBusy
Specifica se la finestra di dialogo "occupato" è abilitata o disabilitata.

COleMessageFilter::EnableNotRespondingDialog

Abilita e disabilita la finestra di dialogo "non risponde", visualizzata se una tastiera o un messaggio del mouse è in sospeso durante una chiamata OLE e il timeout della chiamata è scaduto.

void EnableNotRespondingDialog(BOOL bEnableNotResponding = TRUE);

Parametri

bEnableNotResponding
Specifica se la finestra di dialogo "non risponde" è abilitata o disabilitata.

COleMessageFilter::EndBusyState

Chiamare questa funzione per terminare uno stato occupato.

virtual void EndBusyState();

Osservazioni:

Funziona insieme a BeginBusyState per controllare lo stato occupato dell'applicazione. La funzione SetBusyReply determina la risposta dell'applicazione alla chiamata di applicazioni quando è occupato.

Il BeginBusyState e EndBusyState chiama rispettivamente incremento e decremento, un contatore che determina se l'applicazione è occupata. Ad esempio, due chiamate a BeginBusyState e una chiamata a comportano EndBusyState comunque uno stato occupato. Per annullare uno stato occupato, è necessario chiamare EndBusyState lo stesso numero di chiamate BeginBusyState .

Per impostazione predefinita, il framework entra nello stato occupato durante l'elaborazione inattiva, che viene eseguito da CWinApp::OnIdle. Mentre l'applicazione gestisce ON_UPDATE_COMMAND_UI notifiche, le chiamate in ingresso vengono gestite dopo il completamento dell'elaborazione inattiva.

COleMessageFilter::OnMessagePending

Chiamato dal framework per elaborare i messaggi mentre è in corso una chiamata OLE.

virtual BOOL OnMessagePending(const MSG* pMsg);

Parametri

pMsg
Puntatore al messaggio in sospeso.

Valore restituito

Diverso da zero in caso di esito positivo; in caso contrario, 0.

Osservazioni:

Quando un'applicazione chiamante è in attesa del completamento di una chiamata, il framework chiama OnMessagePending con un puntatore al messaggio in sospeso. Per impostazione predefinita, il framework invia WM_PAINT messaggi, in modo che gli aggiornamenti della finestra possano verificarsi durante una chiamata che richiede molto tempo.

È necessario registrare il filtro dei messaggi tramite una chiamata a Registra prima che possa diventare attiva.

COleMessageFilter::Register

Registra il filtro dei messaggi con le DLL di sistema OLE.

BOOL Register();

Valore restituito

Diverso da zero in caso di esito positivo; in caso contrario, 0.

Osservazioni:

Un filtro di messaggio non ha alcun effetto a meno che non sia registrato con le DLL di sistema. In genere il codice di inizializzazione dell'applicazione registra il filtro dei messaggi dell'applicazione. Qualsiasi altro filtro di messaggio registrato dall'applicazione deve essere revocato prima che il programma venga terminato da una chiamata a Revoke.

Il filtro dei messaggi predefinito del framework viene registrato automaticamente durante l'inizializzazione e revocato alla chiusura.

COleMessageFilter::Revoke

Revoca una registrazione precedente eseguita da una chiamata a Registra.

void Revoke();

Osservazioni:

È necessario revocare un filtro di messaggio prima che il programma termini.

Anche il filtro dei messaggi predefinito, creato e registrato automaticamente dal framework, viene revocato automaticamente.

COleMessageFilter::SetBusyReply

Questa funzione imposta la "risposta occupata" dell'applicazione.

void SetBusyReply(SERVERCALL nBusyReply);

Parametri

nBusyReply
Valore dell'enumerazione SERVERCALL , definito in COMPOBJ.H. Può avere uno dei valori seguenti:

  • SERVERCALL_ISHANDLED L'applicazione può accettare chiamate ma potrebbe non riuscire nell'elaborazione di una determinata chiamata.

  • SERVERCALL_REJECTED L'applicazione probabilmente non sarà mai in grado di elaborare una chiamata.

  • SERVERCALL_RETRYLATER L'applicazione è temporaneamente in uno stato in cui non può elaborare una chiamata.

Osservazioni:

Le funzioni BeginBusyState e EndBusyState controllano lo stato occupato dell'applicazione.

Quando un'applicazione è stata occupata con una chiamata a BeginBusyState, risponde alle chiamate dalle DLL di sistema OLE con un valore determinato dall'ultima impostazione di SetBusyReply. L'applicazione chiamante usa questa risposta occupata per determinare l'azione da eseguire.

Per impostazione predefinita, la risposta occupata è SERVERCALL_RETRYLATER. Questa risposta fa sì che l'applicazione chiamante ritenta la chiamata il prima possibile.

COleMessageFilter::SetMessagePendingDelay

Determina per quanto tempo l'applicazione chiamante attende una risposta dall'applicazione chiamata prima di eseguire altre azioni.

void SetMessagePendingDelay(DWORD nTimeout = 5000);

Parametri

nTimeout
Numero di millisecondi per il ritardo in sospeso del messaggio.

Osservazioni:

Questa funzione funziona insieme a SetRetryReply.

COleMessageFilter::SetRetryReply

Determina l'azione dell'applicazione chiamante quando riceve una risposta occupata da un'applicazione chiamata.

void SetRetryReply(DWORD nRetryReply = 0);

Parametri

nRetryReply
Numero di millisecondi tra i tentativi.

Osservazioni:

Quando un'applicazione chiamata indica che è occupato, l'applicazione chiamante può decidere di attendere fino a quando il server non è più occupato, di riprovare immediatamente o di riprovare dopo un intervallo specificato. Può anche decidere di annullare completamente la chiamata.

La risposta del chiamante è controllata dalle funzioni SetRetryReply e da SetMessagePendingDelay. SetRetryReply determina per quanto tempo l'applicazione chiamante deve attendere tra i tentativi per una determinata chiamata. SetMessagePendingDelay determina per quanto tempo l'applicazione chiamante attende una risposta dal server prima di eseguire ulteriori azioni.

In genere le impostazioni predefinite sono accettabili e non è necessario modificarle. Il framework ritenta la chiamata ogni nRetryReply millisecondi fino a quando la chiamata non passa o il ritardo in sospeso del messaggio è scaduto. Il valore 0 per nRetryReply specifica un nuovo tentativo immediato e - 1 specifica l'annullamento della chiamata.

Quando il ritardo in sospeso del messaggio è scaduto, viene visualizzata la finestra di dialogo OLE "occupato" (vedere COleBusyDialog) in modo che l'utente possa scegliere di annullare o ripetere la chiamata. Chiama EnableBusyDialog per abilitare o disabilitare questa finestra di dialogo.

Quando un messaggio della tastiera o del mouse è in sospeso durante una chiamata e la chiamata è scaduta (superato il ritardo in sospeso del messaggio), viene visualizzata la finestra di dialogo "non risponde". Chiamare EnableNotRespondingDialog per abilitare o disabilitare questa finestra di dialogo. In genere questo stato di cose indica che qualcosa è andato storto e l'utente sta diventando impaziente.

Quando le finestre di dialogo sono disabilitate, viene sempre usata la "risposta di ripetizione dei tentativi" corrente per le chiamate alle applicazioni occupate.

Vedi anche

Classe CCmdTarget
Grafico della gerarchia
Classe CCmdTarget