Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Az OLE jelentős ellenőrzést igényel az alkalmazások és objektumaik felett. Az OLE rendszer DLL-jeinek képesnek kell lenniük az alkalmazások automatikus indítására és kiadására, az objektumok előállításának és módosításának koordinálására stb. A jelen témakörben szereplő függvények megfelelnek ezeknek a követelményeknek. Az OLE rendszer DLL-einek meghívása mellett ezeket a függvényeket néha alkalmazásoknak is meg kell hívniuk.
Alkalmazásvezérlő
| Név | Leírás |
|---|---|
| AfxOleCanExitApp | Azt jelzi, hogy az alkalmazás leállhat-e. |
| AfxOleGetMessageFilter | Lekéri az alkalmazás aktuális üzenetszűrőjét. |
| AfxOleGetUserCtrl | Lekéri az aktuális felhasználóvezérlő jelzőt. |
| AfxOleSetUserCtrl | Beállítja vagy törli a felhasználóvezérlő jelzőt. |
| AfxOleLockApp | Növeli a keretrendszer aktív objektumok számának globális számát az alkalmazásban. |
| AfxOleLockControl | Zárolja a megadott vezérlő osztály-előállítóját. |
| AfxOleUnlockApp | Az alkalmazás aktív objektumainak számát a keretrendszer számának megcétlése. |
| AfxOleUnlockControl | Feloldja a megadott vezérlő osztály-előállítójának zárolását. |
| AfxOleRegisterServerClass | Regisztrál egy kiszolgálót az OLE rendszerregisztrációs adatbázisában. |
| AfxOleSetEditMenu | Implementálja a typename Object parancs felhasználói felületét. |
AfxOleCanExitApp
Azt jelzi, hogy az alkalmazás leállhat-e.
BOOL AFXAPI AfxOleCanExitApp();
Visszaadott érték
Nonzero, ha az alkalmazás kiléphet; egyéb esetben 0.
Megjegyzések
Az alkalmazások nem fejeződnek be, ha nincsenek függőben lévő hivatkozások az objektumokra. A globális függvények AfxOleLockAppAfxOleUnlockApp , valamint a növekmény és a decrement az alkalmazás objektumaira mutató hivatkozások számlálója. Az alkalmazásnak nem szabad leállnia, ha ez a számláló nem működik. Ha a számláló nem működik, az alkalmazás főablaka rejtve lesz (nem semmisül meg), amikor a felhasználó a Rendszer menüjéből a Bezárás vagy a Fájl menüből való Kilépés lehetőséget választja. A keretrendszer meghívja ezt a függvényt a következőben CFrameWnd::OnClose: .
példa
// Helper exit function for automation server
BOOL CMainFrame::CanExit()
{
if (AfxOleCanExitApp())
{
// No outstanding object counts - go ahead and exit
return TRUE;
}
else
{
// There are outstanding OLE object counts...
// hide app to give user impression that application has exited.
ShowWindow(SW_HIDE);
// take user out of control of the app
AfxOleSetUserCtrl(FALSE);
return FALSE;
}
}
Követelmények
Fejléc: afxdisp.h
AfxOleGetMessageFilter
Lekéri az alkalmazás aktuális üzenetszűrőjét.
COleMessageFilter* AFXAPI AfxOleGetMessageFilter();
Visszaadott érték
Az aktuális üzenetszűrőre mutató mutató.
Megjegyzések
Hívja meg ezt a függvényt az aktuális COleMessageFilterszármaztatott objektum eléréséhez, ahogyan az aktuális alkalmazásobjektum eléréséhez hívná AfxGetApp .
példa
COleMessageFilter *pFilter = AfxOleGetMessageFilter();
ASSERT_VALID(pFilter);
pFilter->BeginBusyState();
// do things requiring a busy state
pFilter->EndBusyState();
// Another example
//CWinApp-derived class
BOOL CCMFCAutomationApp::InitInstance()
{
CWinApp::InitInstance();
// Initialize OLE libraries
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
CWinThread *pThread = AfxGetThread();
if (pThread != NULL)
{
// Destroy message filter, thereby unregistering it.
delete pThread->m_pMessageFilter;
pThread->m_pMessageFilter = NULL;
// Create the new message filter object.
//CMyMessageFilter is derived from COleMessageFilter
pThread->m_pMessageFilter = new CMyMessageFilter;
ASSERT(AfxOleGetMessageFilter() != NULL);
// Register the new message filter object.
AfxOleGetMessageFilter()->Register();
}
//...
//...
//...
}
Követelmények
Fejléc: afxwin.h
AfxOleGetUserCtrl
Lekéri az aktuális felhasználóvezérlő jelzőt.
BOOL AFXAPI AfxOleGetUserCtrl();
Visszaadott érték
Nonzero, ha a felhasználó felügyeli az alkalmazást; egyéb esetben 0.
Megjegyzések
Amikor a felhasználó kifejezetten megnyitott vagy létrehozott egy új dokumentumot, a felhasználó felügyeli az alkalmazást. A felhasználó azt is szabályozza, hogy az alkalmazást nem az OLE rendszer DLL-ekkel indították-e el – vagyis ha a felhasználó a rendszerhéjjal indította el az alkalmazást.
Követelmények
Fejléc: afxdisp.h
AfxOleSetUserCtrl
Beállítja vagy törli a felhasználóvezérlő jelzőt, amely a következő hivatkozásban AfxOleGetUserCtrltalálható: .
void AFXAPI AfxOleSetUserCtrl(BOOL bUserCtrl);
Paraméterek
bUserCtrl
Megadja, hogy a felhasználóvezérlő jelzőt be kell-e állítani vagy törölni kell.
Megjegyzések
A keretrendszer akkor hívja meg ezt a függvényt, ha a felhasználó létrehoz vagy betölt egy dokumentumot, de nem akkor, ha egy dokumentumot egy közvetett művelettel hoz létre, például beágyazott objektumot tölt be egy tárolóalkalmazásból.
Hívja meg ezt a függvényt, ha az alkalmazás más műveletei a felhasználót irányítják az alkalmazás felett.
Követelmények
Fejléc: afxdisp.h
AfxOleLockApp
Növeli a keretrendszer aktív objektumok számának globális számát az alkalmazásban.
void AFXAPI AfxOleLockApp();
Megjegyzések
A keretrendszer megtartja az alkalmazásokban aktív objektumok számát.
AfxOleLockApp Ez AfxOleUnlockApp a szám a függvények számának növelését és csökkenését határozza meg.
Amikor a felhasználó egy aktív objektumokkal rendelkező alkalmazást próbál bezárni – egy olyan alkalmazást, amelynek az aktív objektumainak száma nem nulla – a keretrendszer elrejti az alkalmazást a felhasználó nézetéből ahelyett, hogy teljesen leállítja azt. A AfxOleCanExitApp függvény azt jelzi, hogy az alkalmazás leállhat-e.
Bármely AfxOleLockApp olyan objektum hívása, amely OLE-interfészeket tesz elérhetővé, ha nem lenne kívánatos, hogy az objektum megsemmisüljön, miközben az ügyfélalkalmazás továbbra is használja őket. A konstruktorban hívható AfxOleUnlockApp objektumok destruktorában is meghívhatóAfxOleLockApp. Alapértelmezés szerint ( COleDocument és származtatott osztályok) automatikusan zárolják és feloldják az alkalmazást.
példa
// Below is a code sample from an Application Wizard-generated SDI
// Application with Automation support. The Application Wizard adds a
// dispatch interface to the document class. AfxOleLockApp() and
// AfxOleUnlockApp() respectively increment and decrement the
// application's object count. When the object count is equal to
// zero and if the user has not taken control of the application,
// the server is terminated.
CCMFCAutomationDoc::CCMFCAutomationDoc()
{
EnableAutomation();
AfxOleLockApp();
}
CCMFCAutomationDoc::~CCMFCAutomationDoc()
{
AfxOleUnlockApp();
}
Követelmények
Fejléc: afxdisp.h
AfxOleUnlockApp
A keretrendszer aktív objektumainak száma csökken az alkalmazásban.
void AFXAPI AfxOleUnlockApp();
Megjegyzések
További AfxOleLockApp információt itt talál.
Amikor az aktív objektumok száma eléri a nullát, AfxOleOnReleaseAllObjects a függvény meghívja.
példa
Lásd az AfxOleLockApp példáját.
Követelmények
Fejléc: afxdisp.h
AfxOleLockControl
Zárolja a megadott vezérlő osztály-előállítóját, hogy a vezérlőhöz társított dinamikusan létrehozott adatok a memóriában maradnak.
Szemantika
BOOL AFXAPI AfxOleLockControl( REFCLSID clsid );
BOOL AFXAPI AfxOleLockControl( LPCTSTR lpszProgID );
Paraméterek
clsid
A vezérlő egyedi osztályazonosítója.
lpszProgID
A vezérlő egyedi programazonosítója.
Visszaadott érték
Nonzero, ha a vezérlő osztály-előállítója sikeresen zárolva lett; egyéb esetben 0.
Megjegyzések
Ez jelentősen felgyorsíthatja a vezérlők megjelenítését. Ha például létrehoz egy vezérlőt egy párbeszédpanelen, és zárolja a vezérlőt AfxOleLockControl, nem kell minden alkalommal létrehoznia és megölnie, amikor a párbeszédpanel megjelenik vagy megsemmisül. Ha a felhasználó többször megnyitja és bezár egy párbeszédpanelt, a vezérlők zárolása jelentősen javíthatja a teljesítményt. Ha készen áll arra, hogy elpusztítsa az irányítást, hívja .AfxOleUnlockControl
példa
// Starts and locks control's (Microsoft Calendar) class factory.
// Control will remain in memory for lifetime of
// application or until AfxOleUnlockControl() is called.
AfxOleLockControl(_T("MSCAL.Calendar"));
Követelmények
fejléc: afxwin.h
AfxOleRegisterServerClass
Ez a függvény lehetővé teszi a kiszolgáló regisztrálását az OLE rendszerregisztrációs adatbázisában.
BOOL AFXAPI AfxOleRegisterServerClass(
REFCLSID clsid,
LPCTSTR lpszClassName,
LPCTSTR lpszShortTypeName,
LPCTSTR lpszLongTypeName,
OLE_APPTYPE nAppType = OAT_SERVER,
LPCTSTR* rglpszRegister = NULL,
LPCTSTR* rglpszOverwrite = NULL);
Paraméterek
clsid
Hivatkozás a kiszolgáló OLE-osztályazonosítójára.
lpszClassName
Mutasson a kiszolgáló objektumainak osztálynevét tartalmazó sztringre.
lpszShortTypeName
Mutasson egy sztringre, amely a kiszolgáló objektumtípusának rövid nevét tartalmazza, például "Diagram".
lpszLongTypeName
Mutató a kiszolgáló objektumtípusának hosszú nevét tartalmazó sztringre, például "Microsoft Excel 5.0-diagram".
nAppType
A OLE_APPTYPE enumerálásból vett érték, amely megadja az OLE-alkalmazás típusát. A lehetséges értékek a következők:
OAT_INPLACE_SERVER kiszolgáló teljes felhasználói felülettel rendelkezik.
OAT_SERVER kiszolgáló csak a beágyazást támogatja.
OAT_CONTAINER tároló támogatja a beágyazásokra mutató hivatkozásokat.
IDispatchOAT_DISPATCH_OBJECT -kompatibilis objektum.
rglpszRegister
Az OLE rendszerregisztrációs adatbázisához hozzáadni kívánt kulcsokat és értékeket képviselő sztringekre mutató mutatótömb, ha nem találhatók meg a kulcsok meglévő értékei.
rglpszOverwrite
Az OLE rendszerregisztrációs adatbázisához hozzáadni kívánt kulcsokat és értékeket képviselő sztringekre mutató mutatótömb, ha a beállításjegyzék az adott kulcsok meglévő értékeit tartalmazza.
Visszaadott érték
Nonzero, ha a kiszolgálóosztály sikeresen regisztrálva van; egyéb esetben 0.
Megjegyzések
A legtöbb alkalmazás az alkalmazás dokumentumtípusainak regisztrálására használható COleTemplateServer::Register . Ha az alkalmazás rendszerregisztrációs adatbázisának formátuma nem felel meg a tipikus mintának, további vezérlést is használhat AfxOleRegisterServerClass .
A beállításjegyzék kulcsokból és értékekből áll. Az rglpszRegister és az rglpszOverwrite argumentumok karakterláncokra mutató mutatótömbök, amelyek mindegyike egy kulcsból és egy NULL karakterrel ('\0') elválasztott értékből áll. Ezen sztringek mindegyike helyettesíthető paraméterekkel rendelkezhet, amelyek helyét a %5keresztül %1 karaktersorozatok jelölik.
A szimbólumok a következőképpen vannak kitöltve:
| Szimbólum | Érték |
|---|---|
| %1 | Osztályazonosító, sztringként formázva |
| %2 | Osztály neve |
| %3 | Végrehajtható fájl elérési útja |
| %4 | Rövid típus neve |
| %5 | Hosszú típus neve |
Követelmények
Fejléc: afxdisp.h
AfxOleSetEditMenu
Implementálja a typename Object parancs felhasználói felületét.
void AFXAPI AfxOleSetEditMenu(
COleClientItem* pClient,
CMenu* pMenu,
UINT iMenuItem,
UINT nIDVerbMin,
UINT nIDVerbMax = 0,
UINT nIDConvert = 0);
Paraméterek
pClient
Az ügyfél OLE elemére mutató mutató.
pMenu
A frissíteni kívánt menüobjektumra mutató mutató.
iMenuItem
A frissíteni kívánt menüelem indexe.
nIDVerbMin
Az elsődleges igének megfelelő parancsazonosító.
nIDVerbMax
Az utolsó igének megfelelő parancsazonosító.
nIDConvert
A Konvertálás menüelem azonosítója.
Megjegyzések
Ha a kiszolgáló csak egy elsődleges parancsot ismer fel, a menüelem "verb typename Object" lesz, és a rendszer elküldi az nIDVerbMin parancsot, amikor a felhasználó kiválasztja a parancsot. Ha a kiszolgáló több igét is felismer, akkor a menüelem "typename Object" ( Típusnév objektum) lesz, és az összes parancsot tartalmazó almenü jelenik meg, amikor a felhasználó kiválasztja a parancsot. Amikor a felhasználó kiválaszt egy igét az almenüből, a rendszer az nIDVerbMin parancsot küldi el, ha az első igét választja, az nIDVerbMin + 1 értéket, ha a második ige van kiválasztva, és így tovább. Az alapértelmezett COleDocument implementáció automatikusan kezeli ezt a funkciót.
Az ügyfél alkalmazáserőforrás-szkriptjében () a következő utasításnak kell lennie. RC) fájl:
<#include afxolecl.rc>
Követelmények
Fejléc: afxole.h
AfxOleUnlockControl
Feloldja a megadott vezérlő osztály-előállítójának zárolását.
Szemantika
BOOL AFXAPI AfxOleUnlockControl( REFCLSID clsid );
BOOL AFXAPI AfxOleUnlockControl( LPCTSTR lpszProgID );
Paraméterek
clsid
A vezérlő egyedi osztályazonosítója.
lpszProgID
A vezérlő egyedi programazonosítója.
Visszaadott érték
Nonzero, ha a vezérlő osztály-előállítóját sikeresen feloldották; egyéb esetben 0.
Megjegyzések
A vezérlő zárolva AfxOleLockControlvan, így a vezérlőhöz társított dinamikusan létrehozott adatok a memóriában maradnak. Ez jelentősen felgyorsíthatja a vezérlő megjelenítését, mert a vezérlőt nem kell létrehozni és megsemmisíteni minden alkalommal, amikor megjelenik. Ha készen áll arra, hogy elpusztítsa az irányítást, hívja .AfxOleUnlockControl
példa
// Unlock control's (Microsoft Calendar Control) class factory.
AfxOleUnlockControl(_T("MSCAL.Calendar"));
Követelmények
fejléc: afxwin.h