Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
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.