Share via


COleMessageFilter-klasse

Opmerking

De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Beheert de gelijktijdigheid die is vereist voor de interactie van OLE-toepassingen.

Syntaxis

class COleMessageFilter : public CCmdTarget

Leden

Openbare constructors

Naam Description
COleMessageFilter::COleMessageFilter Maakt een COleMessageFilter object.

Openbare methoden

Naam Description
COleMessageFilter::BeginBusyState Hiermee wordt de toepassing bezet.
COleMessageFilter::EnableBusyDialog Hiermee schakelt u het dialoogvenster in dat wordt weergegeven wanneer een aangeroepen toepassing bezet is.
COleMessageFilter::EnableNotRespondingDialog Hiermee schakelt u het dialoogvenster in dat wordt weergegeven wanneer een aangeroepen toepassing niet reageert.
COleMessageFilter::EndBusyState Hiermee wordt de status Bezet van de toepassing beëindigd.
COleMessageFilter::OnMessagePending Wordt aangeroepen door het framework om berichten te verwerken terwijl er een OLE-aanroep wordt uitgevoerd.
COleMessageFilter::Registreren Registreert het berichtfilter met de OLE-systeem-DLL's.
COleMessageFilter::Revoke Hiermee wordt de registratie van het berichtfilter met de OLE-systeem-DLL's ingetrokken.
COleMessageFilter::SetBusyReply Bepaalt het antwoord van de bezette toepassing op een OLE-aanroep.
COleMessageFilter::SetMessagePendingDelay Bepaalt hoe lang de toepassing wacht op een reactie op een OLE-aanroep.
COleMessageFilter::SetRetryReply Bepaalt het antwoord van de aanroepende toepassing op een drukke toepassing.

Opmerkingen

De COleMessageFilter klasse is handig in het visueel bewerken van server- en containertoepassingen, evenals OLE-automatiseringstoepassingen. Voor servertoepassingen die worden aangeroepen, kan deze klasse worden gebruikt om de toepassing bezet te maken, zodat binnenkomende aanroepen van andere containertoepassingen worden geannuleerd of later opnieuw worden geprobeerd. Deze klasse kan ook worden gebruikt om te bepalen welke actie moet worden uitgevoerd door een aanroepende toepassing wanneer de aangeroepen toepassing bezet is.

Veelvoorkomend gebruik is dat een servertoepassing BeginBusyState en EndBusyState aanroept wanneer het gevaarlijk zou zijn voor een document of een ander toegankelijk OLE-object dat kan worden vernietigd. Deze aanroepen worden gedaan in CWinApp::OnIdle tijdens updates van de gebruikersinterface.

Standaard wordt een COleMessageFilter object toegewezen wanneer de toepassing wordt geïnitialiseerd. Het kan worden opgehaald met AfxOleGetMessageFilter.

Dit is een geavanceerde klasse; U hoeft er zelden rechtstreeks mee te werken.

Zie het artikel Servers: Een server implementeren voor meer informatie.

Overnamehiërarchie

CObject

CCmdTarget

COleMessageFilter

Requirements

Koptekst: afxole.h

COleMessageFilter::BeginBusyState

Roep deze functie aan om de status Bezet te starten.

virtual void BeginBusyState();

Opmerkingen

Het werkt in combinatie met EndBusyState om de status bezet van de toepassing te beheren. De functie SetBusyReply bepaalt het antwoord van de toepassing op het aanroepen van toepassingen wanneer deze bezet is.

De BeginBusyState en EndBusyState roept respectievelijk incrementele en aflopende aanroepen aan, een teller die bepaalt of de toepassing bezet is. Twee aanroepen naar BeginBusyState en één aanroep om nog steeds de status Bezet te EndBusyState hebben. Als u een bezet-status wilt annuleren, moet u hetzelfde aantal keren BeginBusyState aanroepenEndBusyState.

Het framework voert standaard de bezet-status in tijdens niet-actieve verwerking, die wordt uitgevoerd door CWinApp::OnIdle. Terwijl de toepassing ON_COMMANDUPDATEUI meldingen verwerkt, worden binnenkomende oproepen later verwerkt nadat de verwerking van inactiviteit is voltooid.

COleMessageFilter::COleMessageFilter

Hiermee maakt u een COleMessageFilter object.

COleMessageFilter();

COleMessageFilter::EnableBusyDialog

Hiermee schakelt u het dialoogvenster Bezet in en uit, dat wordt weergegeven wanneer de vertraging in behandeling van het bericht verloopt (zie SetRetryReply) tijdens een OLE-aanroep.

void EnableBusyDialog(BOOL bEnableBusy = TRUE);

Parameterwaarden

bEnableBusy
Hiermee geeft u op of het dialoogvenster Bezet is ingeschakeld of uitgeschakeld.

COleMessageFilter::EnableNotRespondingDialog

Hiermee wordt het dialoogvenster 'reageert niet' ingeschakeld en uitgeschakeld. Dit wordt weergegeven als een toetsenbord- of muisbericht in behandeling is tijdens een OLE-oproep en er een time-out optreedt voor de oproep.

void EnableNotRespondingDialog(BOOL bEnableNotResponding = TRUE);

Parameterwaarden

bEnableNot Respond
Hiermee geeft u op of het dialoogvenster 'niet reageren' is ingeschakeld of uitgeschakeld.

COleMessageFilter::EndBusyState

Roep deze functie aan om een bezet-status te beëindigen.

virtual void EndBusyState();

Opmerkingen

Het werkt in combinatie met BeginBusyState om de status bezet van de toepassing te beheren. De functie SetBusyReply bepaalt het antwoord van de toepassing op het aanroepen van toepassingen wanneer deze bezet is.

De BeginBusyState en EndBusyState roept respectievelijk incrementele en aflopende aanroepen aan, een teller die bepaalt of de toepassing bezet is. Twee aanroepen naar BeginBusyState en één aanroep om nog steeds de status Bezet te EndBusyState hebben. Als u een bezet-status wilt annuleren, moet u hetzelfde aantal keren BeginBusyState aanroepenEndBusyState.

Het framework voert standaard de bezet-status in tijdens niet-actieve verwerking, die wordt uitgevoerd door CWinApp::OnIdle. Terwijl de toepassing ON_UPDATE_COMMAND_UI meldingen verwerkt, worden binnenkomende oproepen verwerkt nadat de verwerking van inactiviteit is voltooid.

COleMessageFilter::OnMessagePending

Wordt aangeroepen door het framework om berichten te verwerken terwijl er een OLE-aanroep wordt uitgevoerd.

virtual BOOL OnMessagePending(const MSG* pMsg);

Parameterwaarden

pMsg
Wijs het bericht in behandeling aan.

Retourwaarde

Nonzero op succes; anders 0.

Opmerkingen

Wanneer een aanroepende toepassing wacht totdat een aanroep is voltooid, wordt het framework aangeroepen OnMessagePending met een aanwijzer naar het bericht dat in behandeling is. Het framework verzendt standaard WM_PAINT berichten, zodat vensterupdates kunnen plaatsvinden tijdens een oproep die lang duurt.

U moet uw berichtfilter registreren door middel van een aanroep om te registreren voordat het actief kan worden.

COleMessageFilter::Registreren

Registreert het berichtfilter met de OLE-systeem-DLL's.

BOOL Register();

Retourwaarde

Nonzero op succes; anders 0.

Opmerkingen

Een berichtfilter heeft geen effect, tenzij het is geregistreerd bij de systeem-DLL's. Meestal registreert de initialisatiecode van uw toepassing het berichtfilter van de toepassing. Elk ander berichtfilter dat door uw toepassing is geregistreerd, moet worden ingetrokken voordat het programma wordt beëindigd door een aanroep om in te trekken.

Het standaardberichtfilter van het framework wordt automatisch geregistreerd tijdens de initialisatie en bij beëindiging ingetrokken.

COleMessageFilter::Revoke

Hiermee wordt een eerdere registratie ingetrokken die is uitgevoerd door een aanroep om te registreren.

void Revoke();

Opmerkingen

Een berichtfilter moet worden ingetrokken voordat het programma wordt beëindigd.

Het standaardberichtfilter, dat automatisch door het framework wordt gemaakt en geregistreerd, wordt ook automatisch ingetrokken.

COleMessageFilter::SetBusyReply

Met deze functie wordt het 'bezet antwoord' van de toepassing ingesteld.

void SetBusyReply(SERVERCALL nBusyReply);

Parameterwaarden

nBusyReply
Een waarde uit de SERVERCALL opsomming, die is gedefinieerd in COMPOBJ.H. Het kan een van de volgende waarden hebben:

  • SERVERCALL_ISHANDLED De toepassing kan aanroepen accepteren, maar kan mislukken bij het verwerken van een bepaalde aanroep.

  • SERVERCALL_REJECTED De toepassing kan waarschijnlijk nooit een aanroep verwerken.

  • SERVERCALL_RETRYLATER De toepassing heeft tijdelijk een status waarin een aanroep niet kan worden verwerkt.

Opmerkingen

De functies BeginBusyState en EndBusyState bepalen de status bezet van de toepassing.

Wanneer een toepassing bezig is met een aanroep, BeginBusyStatereageert deze op oproepen van de OLE-systeem-DLL's met een waarde die wordt bepaald door de laatste instelling van SetBusyReply. De aanroepende toepassing gebruikt dit bezet antwoord om te bepalen welke actie moet worden ondernomen.

Standaard wordt het bezet-antwoord SERVERCALL_RETRYLATER. Dit antwoord zorgt ervoor dat de aanroepende toepassing de oproep zo snel mogelijk opnieuw probeert uit te voeren.

COleMessageFilter::SetMessagePendingDelay

Bepaalt hoe lang de aanroepende toepassing wacht op een reactie van de aangeroepen toepassing voordat u verdere actie onderneemt.

void SetMessagePendingDelay(DWORD nTimeout = 5000);

Parameterwaarden

nTimeout
Aantal milliseconden voor de vertraging die in behandeling is voor berichten.

Opmerkingen

Deze functie werkt samen met SetRetryReply.

COleMessageFilter::SetRetryReply

Bepaalt de actie van de aanroepende toepassing wanneer deze een bezet antwoord ontvangt van een aangeroepen toepassing.

void SetRetryReply(DWORD nRetryReply = 0);

Parameterwaarden

nRetryReply
Aantal milliseconden tussen nieuwe pogingen.

Opmerkingen

Wanneer een aangeroepen toepassing aangeeft dat het bezet is, kan de aanroepende toepassing besluiten te wachten totdat de server niet meer bezet is, om het meteen opnieuw te proberen of om het opnieuw te proberen na een opgegeven interval. Het kan ook besluiten om de oproep helemaal te annuleren.

Het antwoord van de beller wordt bepaald door de functies SetRetryReply en SetMessagePendingDelay. SetRetryReply bepaalt hoe lang de aanroepende toepassing moet wachten tussen nieuwe pogingen voor een bepaalde oproep. SetMessagePendingDelay bepaalt hoe lang de aanroepende toepassing wacht op een reactie van de server voordat u verdere actie onderneemt.

Normaal gesproken zijn de standaardwaarden acceptabel en hoeven ze niet te worden gewijzigd. Het framework probeert de aanroep elke nRetryReply milliseconden opnieuw uit te voeren totdat de aanroep wordt doorlopen of de vertraging die in behandeling is voor berichten is verlopen. Een waarde van 0 voor nRetryReply geeft een onmiddellijke nieuwe poging op en - 1 specificeert annulering van de oproep.

Wanneer de vertraging die in behandeling is, is verlopen, wordt het OLE-dialoogvenster Bezet (zie COleBusyDialog) weergegeven, zodat de gebruiker ervoor kan kiezen om de oproep te annuleren of opnieuw uit te voeren. Roep EnableBusyDialog aan om dit dialoogvenster in of uit te schakelen.

Wanneer een toetsenbord- of muisbericht in behandeling is tijdens een gesprek en er een time-out is opgetreden voor de oproep (de vertraging in behandeling met het bericht is overschreden), wordt het dialoogvenster 'reageert niet' weergegeven. Roep EnableNot RespondDialog aan om dit dialoogvenster in of uit te schakelen. Meestal geeft deze status van zaken aan dat er iets mis is gegaan en de gebruiker ongeduldig wordt.

Wanneer de dialoogvensters zijn uitgeschakeld, wordt het huidige antwoord voor opnieuw proberen altijd gebruikt voor aanroepen naar drukke toepassingen.

Zie ook

CCmdTarget-klasse
Hiërarchiegrafiek
CCmdTarget-klasse