Megosztás:


Alkalmazásvezérlő

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

Lásd még

Makrók és globálisak