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
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í.