Megosztás a következőn keresztül:


COleMessageFilter osztály

Megjegyzés:

A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Kezeli az OLE-alkalmazások interakciója által megkövetelt egyidejűséget.

Szemantika

class COleMessageFilter : public CCmdTarget

Tagok

Nyilvános konstruktorok

Név Description
COleMessageFilter::COleMessageFilter Egy COleMessageFilter objektumot hoz létre.

Nyilvános metódusok

Név Description
COleMessageFilter::BeginBusyState Elfoglalt állapotba helyezi az alkalmazást.
COleMessageFilter::EnableBusyDialog Engedélyezi és letiltja azt a párbeszédpanelt, amely akkor jelenik meg, ha egy hívott alkalmazás foglalt.
COleMessageFilter::EnableNotAutoDialog Engedélyezi és letiltja a párbeszédpanelt, amely akkor jelenik meg, ha egy hívott alkalmazás nem válaszol.
COleMessageFilter::EndBusyState Leállítja az alkalmazás foglalt állapotát.
COleMessageFilter::OnMessagePending A keretrendszer meghívja az üzenetek feldolgozására, miközben egy OLE-hívás folyamatban van.
COleMessageFilter::Register Regisztrálja az üzenetszűrőt az OLE rendszer DLL-jeinél.
COleMessageFilter::Visszavonás Visszavonja az üzenetszűrő regisztrációját az OLE rendszer DLL-jeinél.
COleMessageFilter::SetBusyReply Meghatározza az elfoglalt alkalmazás válaszát egy OLE-hívásra.
COleMessageFilter::SetMessagePendingDelay Meghatározza, hogy az alkalmazás mennyi ideig vár egy OLE-hívásra adott válaszra.
COleMessageFilter::SetRetryReply Meghatározza, hogy a hívó alkalmazás válaszol-e egy foglalt alkalmazásra.

Megjegyzések

Az COleMessageFilter osztály hasznos a vizualizációszerkesztési kiszolgáló- és tárolóalkalmazásokban, valamint az OLE automatizálási alkalmazásokban. A meghívott kiszolgálóalkalmazások esetében ez az osztály használható az alkalmazás "foglalt" állapotának biztosítására, hogy a többi tárolóalkalmazásból érkező bejövő hívásokat a rendszer később megszakítsa vagy újrapróbálkozza. Ez az osztály azt is meghatározhatja, hogy a hívó alkalmazás milyen műveletet hajt végre, amikor a hívott alkalmazás foglalt.

A gyakori használat az, hogy egy kiszolgálóalkalmazás meghívja a BeginBusyState-t és az EndBusyState-t , ha egy dokumentum vagy más akadálymentes OLE-objektum megsemmisítése veszélyes lenne. Ezek a hívások a CWinApp::OnIdle-ben jönnek létre a felhasználói felület frissítései során.

Alapértelmezés szerint az COleMessageFilter alkalmazás inicializálásakor egy objektum lesz lefoglalva. Az AfxOleGetMessageFilterrel lekérhető.

Ez egy speciális osztály; ritkán kell közvetlenül dolgoznia vele.

További információ: Kiszolgálók: Kiszolgáló implementálása.

Öröklési hierarchia

CObject

CCmdTarget

COleMessageFilter

Requirements

Fejléc: afxole.h

COleMessageFilter::BeginBusyState

Hívja meg ezt a függvényt foglalt állapot indításához.

virtual void BeginBusyState();

Megjegyzések

Az EndBusyState-nal együttműködve szabályozza az alkalmazás foglalt állapotát. A SetBusyReply függvény határozza meg az alkalmazás válaszát az alkalmazások hívására, ha foglalt.

A BeginBusyState növekményt és EndBusyState a decrementet hívja meg, illetve egy számlálót, amely meghatározza, hogy az alkalmazás foglalt-e. Például két hívás BeginBusyState és egy hívás EndBusyState továbbra is foglalt állapotot eredményez. Az elfoglalt állapot megszakításához ugyanannyi alkalommal BeginBusyState kell meghívniEndBusyState.

Alapértelmezés szerint a keretrendszer tétlen feldolgozás közben adja meg a foglalt állapotot, amelyet a CWinApp::OnIdle hajt végre. Bár az alkalmazás ON_COMMANDUPDATEUI értesítéseket kezel, a bejövő hívásokat később, az inaktív adatok feldolgozása után kezeli a rendszer.

COleMessageFilter::COleMessageFilter

Létrehoz egy objektumot COleMessageFilter .

COleMessageFilter();

COleMessageFilter::EnableBusyDialog

Engedélyezi és letiltja az elfoglaltsági párbeszédpanelt, amely akkor jelenik meg, ha az üzenet függőben lévő késleltetése lejár (lásd : SetRetryReply) egy OLE-hívás során.

void EnableBusyDialog(BOOL bEnableBusy = TRUE);

Paraméterek

bEnableBusy
Megadja, hogy a "foglalt" párbeszédpanel engedélyezve van-e vagy le van-e tiltva.

COleMessageFilter::EnableNotAutoDialog

Engedélyezi és letiltja a "nem válaszol" párbeszédpanelt, amely akkor jelenik meg, ha egy billentyűzet- vagy egérüzenet függőben van egy OLE-hívás során, és a hívás túllépte az időkorlátot.

void EnableNotRespondingDialog(BOOL bEnableNotResponding = TRUE);

Paraméterek

bEnableNot2
Megadja, hogy a "nem válaszol" párbeszédpanel engedélyezve van-e vagy le van-e tiltva.

COleMessageFilter::EndBusyState

Hívja meg ezt a függvényt egy foglalt állapot befejezéséhez.

virtual void EndBusyState();

Megjegyzések

A BeginBusyState-nal együtt működik az alkalmazás foglalt állapotának szabályozásához. A SetBusyReply függvény határozza meg az alkalmazás válaszát az alkalmazások hívására, ha foglalt.

A BeginBusyState növekményt és EndBusyState a decrementet hívja meg, illetve egy számlálót, amely meghatározza, hogy az alkalmazás foglalt-e. Például két hívás BeginBusyState és egy hívás EndBusyState továbbra is foglalt állapotot eredményez. Az elfoglalt állapot megszakításához ugyanannyi alkalommal BeginBusyState kell meghívniEndBusyState.

Alapértelmezés szerint a keretrendszer tétlen feldolgozás közben adja meg a foglalt állapotot, amelyet a CWinApp::OnIdle hajt végre. Miközben az alkalmazás ON_UPDATE_COMMAND_UI értesítéseket kezel, a bejövő hívásokat az inaktív adatok feldolgozása után kezeli a rendszer.

COleMessageFilter::OnMessagePending

A keretrendszer meghívja az üzenetek feldolgozására, miközben egy OLE-hívás folyamatban van.

virtual BOOL OnMessagePending(const MSG* pMsg);

Paraméterek

pMsg
Mutasson a függőben lévő üzenetre.

Visszaadott érték

Nonzero a siker; egyéb esetben 0.

Megjegyzések

Ha egy hívó alkalmazás a hívás befejezésére vár, a keretrendszer egy mutatóval hívja OnMessagePending meg a függőben lévő üzenetet. Alapértelmezés szerint a keretrendszer WM_PAINT üzeneteket küld, hogy az ablakfrissítések hosszú ideig tartó hívás közben is végbe tudjanak esni.

Az aktívvá válás előtt regisztrálnia kell az üzenetszűrőt egy regisztrációra irányuló hívással.

COleMessageFilter::Register

Regisztrálja az üzenetszűrőt az OLE rendszer DLL-jeinél.

BOOL Register();

Visszaadott érték

Nonzero a siker; egyéb esetben 0.

Megjegyzések

Az üzenetszűrőnek nincs hatása, kivéve, ha regisztrálva van a rendszer DLL-eivel. Az alkalmazás inicializálási kódja általában regisztrálja az alkalmazás üzenetszűrőjét. Az alkalmazás által regisztrált egyéb üzenetszűrőket vissza kell vonni, mielőtt a program a Visszavonás hívásával leáll.

A keretrendszer alapértelmezett üzenetszűrője automatikusan regisztrálva lesz az inicializálás során, és a leállításkor vissza lesz vonva.

COleMessageFilter::Visszavonás

Visszavonja a regisztrációra irányuló hívás által végrehajtott korábbi regisztrációt.

void Revoke();

Megjegyzések

A program leállása előtt egy üzenetszűrőt vissza kell vonni.

A keretrendszer által automatikusan létrehozott és regisztrált alapértelmezett üzenetszűrő is automatikusan vissza lesz vonva.

COleMessageFilter::SetBusyReply

Ez a függvény beállítja az alkalmazás "foglalt válaszát".

void SetBusyReply(SERVERCALL nBusyReply);

Paraméterek

nBusyReply
Az enumerálásból származó SERVERCALL érték, amely a COMPOBJ.H-ban van definiálva. A következő értékek bármelyikével rendelkezhet:

  • SERVERCALL_ISHANDLED Az alkalmazás fogadhat hívásokat, de előfordulhat, hogy egy adott hívás feldolgozása meghiúsul.

  • SERVERCALL_REJECTED Az alkalmazás valószínűleg soha nem fogja tudni feldolgozni a hívásokat.

  • SERVERCALL_RETRYLATER Az alkalmazás ideiglenesen olyan állapotban van, amelyben nem tud hívást feldolgozni.

Megjegyzések

A BeginBusyState és az EndBusyState függvény szabályozza az alkalmazás foglalt állapotát.

Ha egy alkalmazás foglalt egy hívással BeginBusyState, az OLE rendszer DLL-jeiből érkező hívásokra válaszol, és az utolsó beállítás SetBusyReplyáltal meghatározott érték van meghatározva. A hívó alkalmazás ezzel a foglalt válaszsal határozza meg, hogy milyen műveletet kell elvégeznie.

Alapértelmezés szerint az elfoglalt válasz SERVERCALL_RETRYLATER. Ez a válasz azt eredményezi, hogy a hívó alkalmazás a lehető leghamarabb újrapróbálkozza a hívást.

COleMessageFilter::SetMessagePendingDelay

Meghatározza, hogy a hívó alkalmazás mennyi ideig vár a hívott alkalmazás válaszára, mielőtt további lépéseket hajt végre.

void SetMessagePendingDelay(DWORD nTimeout = 5000);

Paraméterek

nTimeout
Az üzenet függőben lévő késleltetésének ezredmásodperceinek száma.

Megjegyzések

Ez a függvény a SetRetryReplyrel együttműködve működik.

COleMessageFilter::SetRetryReply

Meghatározza a hívó alkalmazás műveletet, amikor foglalt választ kap egy hívott alkalmazástól.

void SetRetryReply(DWORD nRetryReply = 0);

Paraméterek

nRetryReply
Az újrapróbálkozások közötti ezredmásodpercek száma.

Megjegyzések

Ha egy hívott alkalmazás azt jelzi, hogy foglalt, a hívó alkalmazás dönthet úgy, hogy megvárja, amíg a kiszolgáló nincs elfoglalva, azonnal újrapróbálkozhat, vagy egy megadott időköz után újrapróbálkozhat. Dönthet úgy is, hogy teljesen megszakítja a hívást.

A hívó válaszát a függvények SetRetryReply és a SetMessagePendingDelay vezérlik. SetRetryReply meghatározza, hogy a hívó alkalmazás mennyi ideig várjon az adott hívás újrapróbálkozásai között. SetMessagePendingDelay Meghatározza, hogy a hívó alkalmazás mennyi ideig vár a kiszolgáló válaszára, mielőtt további műveletet hajt végre.

Az alapértelmezett értékek általában elfogadhatóak, és nem kell módosítani. A keretrendszer minden nRetryReply ezredmásodpercben újrapróbálkozza a hívást, amíg a hívás befejeződik, vagy az üzenet függőben lévő késleltetése lejárt. Az nRetryReply 0 értéke azonnali újrapróbálkozást, az - 1 pedig a hívás megszakítását adja meg.

Ha az üzenet függőben lévő késleltetése lejárt, megjelenik az OLE "foglalt párbeszédpanel" (lásd : COleBusyDialog), így a felhasználó dönthet úgy, hogy megszakítja vagy újra megkísérli a hívást. A párbeszédpanel engedélyezéséhez vagy letiltásához hívja meg az EnableBusyDialog parancsot.

Ha a hívás során egy billentyűzet- vagy egérüzenet függőben van, és a hívás túllépte az üzenet függőben lévő késését, megjelenik a "nem válaszol" párbeszédpanel. A párbeszédpanel engedélyezéséhez vagy letiltásához hívja meg az EnableNot.Dialog parancsot. Ez az állapot általában azt jelzi, hogy valami elromlott, és a felhasználó türelmetlen lesz.

Ha a párbeszédpanelek le vannak tiltva, a rendszer mindig az aktuális "újrapróbálkozásra adott választ" használja az elfoglalt alkalmazások hívásaihoz.

Lásd még

CCmdTarget osztály
hierarchiadiagram
CCmdTarget osztály