Sdílet prostřednictvím


COleMessageFilter – třída

Spravuje souběžnost vyžadovanou interakcí aplikací OLE.

Syntaxe

class COleMessageFilter : public CCmdTarget

Členové

Veřejné konstruktory

Název Popis
COleMessageFilter::COleMessageFilter COleMessageFilter Vytvoří objekt.

Veřejné metody

Název Popis
COleMessageFilter::BeginBusyState Umístí aplikaci do zaneprázdněného stavu.
COleMessageFilter::EnableBusyDialog Povolí a zakáže dialogové okno, které se zobrazí, když je volána aplikace zaneprázdněna.
COleMessageFilter::EnableNotRespondingDialog Povolí a zakáže dialogové okno, které se zobrazí, když volána aplikace nereaguje.
COleMessageFilter::EndBusyState Ukončí stav zaneprázdnění aplikace.
COleMessageFilter::OnMessagePending Volá se rozhraním pro zpracování zpráv, zatímco probíhá volání OLE.
COleMessageFilter::Register Zaregistruje filtr zpráv pomocí systémových knihoven DLL OLE.
COleMessageFilter::Revoke Odvolá registraci filtru zpráv pomocí systémových knihoven DLL OLE.
COleMessageFilter::SetBusyReply Určuje zaneprázdněnou odpověď aplikace na volání OLE.
COleMessageFilter::SetMessagePendingDelay Určuje, jak dlouho aplikace čeká na odpověď na volání OLE.
COleMessageFilter::SetRetryReply Určuje odpověď volající aplikace na zaneprázdněnou aplikaci.

Poznámky

Třída COleMessageFilter je užitečná při vizuálních úpravách serverových a kontejnerových aplikací a také v aplikacích automatizace OLE. U serverových aplikací, které se volají, lze tuto třídu použít k tomu, aby aplikace byla zaneprázdněna, aby příchozí volání z jiných aplikací kontejneru byla zrušena nebo se bude opakovat později. Tuto třídu lze také použít k určení akce, kterou má provést volající aplikace, když je volána aplikace zaneprázdněna.

Běžné použití je pro serverovou aplikaci, která volá BeginBusyState a EndBusyState , když by to bylo nebezpečné pro dokument nebo jiný objekt přístupný OLE, který by byl zničen. Tato volání se provádějí v CWinApp::OnIdle během aktualizací uživatelského rozhraní.

Ve výchozím nastavení COleMessageFilter je objekt přidělen při inicializaci aplikace. Dá se načíst pomocí AfxOleGetMessageFilter.

Jedná se o pokročilou třídu; jen zřídka s ním musíte pracovat přímo.

Další informace najdete v článku Servery: Implementace serveru.

Hierarchie dědičnosti

Objekt CObject

CCmdTarget

COleMessageFilter

Požadavky

Hlavička: afxole.h

COleMessageFilter::BeginBusyState

Voláním této funkce zahájíte zaneprázdněný stav.

virtual void BeginBusyState();

Poznámky

Funguje ve spojení s EndBusyState k řízení stavu zaneprázdnění aplikace. Funkce SetBusyReply určuje odpověď aplikace na volání aplikací, když je zaneprázdněn.

EndBusyState Volání BeginBusyState inkrementace a dekrementace, v uvedeném pořadí, čítač, který určuje, zda je aplikace zaneprázdněna. Například dvě volání a BeginBusyState jedno volání, které EndBusyState budou mít stále za následek zaneprázdněný stav. Pokud chcete zrušit zaneprázdněný stav, je nutné volat EndBusyState stejný počet volání BeginBusyState .

Ve výchozím nastavení architektura během zpracování nečinnosti přejde do stavu zaneprázdnění, který provádí CWinApp::OnIdle. Zatímco aplikace zpracovává ON_COMMANDUPDATEUI oznámení, příchozí hovory se zpracovávají později po dokončení nečinných zpracování.

COleMessageFilter::COleMessageFilter

COleMessageFilter Vytvoří objekt.

COleMessageFilter();

COleMessageFilter::EnableBusyDialog

Povolí a zakáže dialogové okno zaneprázdnění, které se zobrazí, když vyprší platnost zpoždění čekajícího na zprávu (viz SetRetryReply) během volání OLE.

void EnableBusyDialog(BOOL bEnableBusy = TRUE);

Parametry

bEnableBusy
Určuje, jestli je povolené nebo zakázané dialogové okno Zaneprázdněno.

COleMessageFilter::EnableNotRespondingDialog

Povolí a zakáže dialogové okno "nereaguje", které se zobrazí, pokud při volání OLE čeká klávesnice nebo zpráva myši a volání vypršel časový limit.

void EnableNotRespondingDialog(BOOL bEnableNotResponding = TRUE);

Parametry

bEnableNotResponding
Určuje, jestli je dialogové okno nereagování povolené nebo zakázané.

COleMessageFilter::EndBusyState

Voláním této funkce ukončíte zaneprázdněný stav.

virtual void EndBusyState();

Poznámky

Funguje ve spojení s BeginBusyState k řízení stavu zaneprázdnění aplikace. Funkce SetBusyReply určuje odpověď aplikace na volání aplikací, když je zaneprázdněn.

EndBusyState Volání BeginBusyState inkrementace a dekrementace, v uvedeném pořadí, čítač, který určuje, zda je aplikace zaneprázdněna. Například dvě volání a BeginBusyState jedno volání, které EndBusyState budou mít stále za následek zaneprázdněný stav. Pokud chcete zrušit zaneprázdněný stav, je nutné volat EndBusyState stejný počet volání BeginBusyState .

Ve výchozím nastavení architektura během zpracování nečinnosti přejde do stavu zaneprázdnění, který provádí CWinApp::OnIdle. Zatímco aplikace zpracovává ON_UPDATE_COMMAND_UI oznámení, příchozí hovory se zpracovávají po dokončení zpracování nečinnosti.

COleMessageFilter::OnMessagePending

Volá se rozhraním pro zpracování zpráv, zatímco probíhá volání OLE.

virtual BOOL OnMessagePending(const MSG* pMsg);

Parametry

pMsg
Ukazatel na čekající zprávu.

Návratová hodnota

Nenulové při úspěchu; jinak 0.

Poznámky

Když volající aplikace čeká na dokončení volání, volání OnMessagePending architektury s ukazatelem na čekající zprávu. Ve výchozím nastavení architektura odesílá WM_PAINT zprávy, aby aktualizace oken mohly nastat během volání, které trvá dlouhou dobu.

Filtr zpráv musíte zaregistrovat pomocí volání pro registraci , aby se mohl aktivovat.

COleMessageFilter::Register

Zaregistruje filtr zpráv pomocí systémových knihoven DLL OLE.

BOOL Register();

Návratová hodnota

Nenulové při úspěchu; jinak 0.

Poznámky

Filtr zpráv nemá žádný vliv, pokud není zaregistrovaný v systémových knihovnách DLL. Inicializační kód aplikace obvykle registruje filtr zpráv aplikace. Všechny ostatní filtry zpráv zaregistrované vaší aplikací by měly být odvolány před ukončením programu voláním odvolat.

Výchozí filtr zpráv architektury se automaticky zaregistruje během inicializace a odvolá při ukončení.

COleMessageFilter::Revoke

Odvolá předchozí registraci provedenou voláním k registraci.

void Revoke();

Poznámky

Filtr zpráv by měl být odvolán před ukončením programu.

Výchozí filtr zpráv, který je vytvořen a automaticky registrován rozhraním, je také automaticky odvolán.

COleMessageFilter::SetBusyReply

Tato funkce nastaví "zaneprázdněnou odpověď" aplikace.

void SetBusyReply(SERVERCALL nBusyReply);

Parametry

nBusyReply
Hodnota z výčtu SERVERCALL , která je definována v COMPOBJ.H. Může mít některou z následujících hodnot:

  • SERVERCALL_ISHANDLED Aplikace může přijímat volání, ale může selhat při zpracování konkrétního volání.

  • SERVERCALL_REJECTED Aplikace pravděpodobně nikdy nebude schopna zpracovat volání.

  • SERVERCALL_RETRYLATER Aplikace je dočasně ve stavu, ve kterém nemůže zpracovat volání.

Poznámky

Funkce BeginBusyState a EndBusyState řídí stav zaneprázdnění aplikace.

Když je aplikace zaneprázdněna voláním BeginBusyState, reaguje na volání z knihoven DLL systému OLE s hodnotou určenou posledním nastavením SetBusyReply. Volající aplikace používá tuto zaneprázdněnou odpověď k určení, jakou akci provést.

Ve výchozím nastavení je zaneprázdněná odpověď SERVERCALL_RETRYLATER. Tato odpověď způsobí, že volající aplikace bude volání opakovat co nejdříve.

COleMessageFilter::SetMessagePendingDelay

Určuje, jak dlouho volající aplikace čeká na odpověď z volané aplikace před provedením další akce.

void SetMessagePendingDelay(DWORD nTimeout = 5000);

Parametry

nTimeout
Počet milisekund pro zpoždění čekající na zprávu

Poznámky

Tato funkce funguje v koncertě s SetRetryReply.

COleMessageFilter::SetRetryReply

Určuje akci volající aplikace, když obdrží zaneprázdněnou odpověď z volané aplikace.

void SetRetryReply(DWORD nRetryReply = 0);

Parametry

nRetryReply
Počet milisekund mezi opakovanými pokusy

Poznámky

Když volána aplikace indikuje, že je zaneprázdněná, volající aplikace se může rozhodnout počkat, dokud server nebude zaneprázdněný, zkuste to znovu hned nebo opakovat po zadaném intervalu. Může se také rozhodnout zrušit hovor úplně.

Odpověď volajícího je řízena funkcemi SetRetryReply a SetMessagePendingDelay. SetRetryReply určuje, jak dlouho má volající aplikace čekat mezi opakovanými pokusy pro dané volání. SetMessagePendingDelay určuje, jak dlouho volající aplikace čeká na odpověď ze serveru před provedením další akce.

Výchozí hodnoty jsou obvykle přijatelné a není nutné je měnit. Architektura opakuje volání každých nRetryReply milisekund, dokud volání neprojde nebo nevypršela prodleva čekající na zprávu. Hodnota 0 pro nRetryReply určuje okamžité opakování a - 1 určuje zrušení volání.

Pokud vypršela platnost zpoždění čekajícího na zprávu, zobrazí se dialogové okno OLE o zaneprázdnění (viz COleBusyDialog), aby se uživatel mohl rozhodnout zrušit nebo zkusit hovor zopakovat. Pokud chcete toto dialogové okno povolit nebo zakázat, zavolejte EnableBusyDialog .

Pokud během hovoru čeká na vyřízení klávesnice nebo zprávy myši a vypršel časový limit hovoru (překročil zpoždění čekající na zprávu), zobrazí se dialogové okno Nereagující. Pokud chcete toto dialogové okno povolit nebo zakázat, zavolejte EnableNotRespondingDialog . Tento stav věcí obvykle značí, že se něco nepovedlo a uživatel je netrpělivý.

Když jsou dialogy zakázané, aktuální "opakovat odpověď" se vždy používá pro volání zaneprázdněných aplikací.

Viz také

CCmdTarget – třída
Graf hierarchie
CCmdTarget – třída