UKÁZKOVÝ: MFCAxs.exe implementuje Active Script Host pomocí MFC

Překlady článku Překlady článku
ID článku: 168214 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

MFCAxs.exe je vzorek, který obsahuje MfcAxscrVb. MfcAxscrVb je instruktážní vzorku aktivní skriptování hostiteli napsané pomocí MFC. Je hostitelem knihovny DLL jazyka VBScript, však mechanismy aktivní skriptování obecný stroji žádné aktivní skriptování. MfcAxscrVb ukazuje poskytují objekty odeslání od hostitele implementovat rozhraní hostitele aktivní skriptování a připojit zprávy systému Windows v hostitelském událostmi skriptovací stroj je aktivována pouze jeden možných způsobů.

MfcAxscrVb obsahuje soubor pracovního prostoru a projekt Visual C++ 5.0. Ačkoli je poskytnuta žádná kompatibilní makefile 4.2 VC ++ nebo mdpfile, je kompatibilní s MFC 4.2b zdrojový kód pro MfcAxscrVb.

Požadavky: COM, automatizace

Další informace

Následující soubor je k dispozici ke stažení z webu služby Stažení softwaru:
MFCAxs.exe
Další informace o tom, jak stahovat soubory technické podpory společnosti Microsoft naleznete následující článku znalostní báze Microsoft Knowledge Base:
119591Jak získat soubory podpory společnosti Microsoft ze serverů služeb online
Microsoft je prohledáván soubor byl zkontrolován na výskyt virů. Společnost Microsoft použila ke aktuální antivirový software, která byla k dispozici na datum, kdy byla zaúčtována v souboru. Soubor je uložen na zabezpečených serverech neumožňujících neoprávněné změny tohoto souboru.

Spuštění ukázky

Při spuštění MfcAxscrVb vzorku zjistíte prvek rozsáhlé úpravy v levém horním rohu aplikace. Můžete vložit nebo typ skriptu do tohoto okna a vyberte „ spustit skript"tlačítko vyvolat skript. Několik skriptů testu jsou podle můžete soubory Script.txt a Testevents.txt.

Vystavení hostitele: odeslání objekty

Hlavní výběr pro tuto ukázku je implementací odeslání objektů pomocí MFC. Důvodem pro to je jednoduché. Skriptovací jazyk není mnohem použití, pokud není nic do skriptu.

Základní technologii, na nichž všechny aktivní skriptování závisí je většina jistě automatizace. Před pokusem o kód libovolného hostitele aktivní skriptování je to nezbytně nutné plné znalosti pracovní automatizace. Existuje několik dobré odkazy pro automatizaci: kapitoly 14 a 15 Brockshmidt's "vnitřní OLE," Kapitola 11 Dale Rogerson "uvnitř COM" a "OLE Automation Programmer's Reference."

CCmdTargetPlus:

Co je třeba jsou některé objekty, které umožňují použitelných ve skriptech vlastnosti a metody prostřednictvím rozhraní IDispatch však generovat také skriptovatelných událostech. MFC jednoznačně provede většinu práce grunt při implementaci rozhraní objektu COM odeslání. Pouze třídy MFC, která podporuje jak příchozí rozhraní odeslání a odchozí rozhraní odeslání nebo události propadů, je však COleControl. Je mnohem příliš objemné pro požadovanou COleControl. Pouze události, odeslání rozhraní a zadejte informace. VBScript potřebuje přečíst typ informace o odeslání objektů, které podporují události. Vytvoříte může buď to průběžně, nebo vytvoření statického typu knihovny pro hostitele vašeho odeslání objekty a získat ITypeInfo pro každé jednotlivé objekt.

Zatímco pravděpodobně není nezbytné, MfcAxscrVb má základní třídy, nazvané CCmdTargetPlus, který podporuje tyto tři kusy: odeslání rozhraní, spojovací body s mapy událostí styl ovládacího prvku a informace o typu snadno přístupné prostřednictvím IProvideClassInfo. Většina kódu v CmdTargetPlus byla přidána umožněno mapy událostí, které usnadňuje přidání události do odvozených tříd mnohem snadnější.

Odeslání objekty:

Všechny objekty odeslání předpokladu hostitele jsou implementovány pomocí CCmdTargetPlus. Existuje několik věcí, které potřebují, jak dobře pracovat. Naleznete v tématu libovolné objekty odeslání (CAButtonDispatch, CBButtonDispatch a tak dále) často používaný text na to, co je nezbytné. Na konci tohoto dokumentu je uveden stručný rundown na MfcAxscrvb společnosti objektový model.

Pokud přidáte vlastní objekty, nezapomeňte znovu zkontrolovat pro tři jedinečné GUID pro primární odeslání a primární události rozhraní a clsid pro objekt v součtu. To je třeba provést během v souboru implementace a v souboru .odl. (Vyjmout a vložit zde pomáhá.) Vyjmout a vložit všechna makra Průvodce třídy a změňte je na název nové třídy. Je velmi konkrétní třídy průvodce, ale pokud budete postupovat podle vše, co právě doprava v .odl, h a cpp soubory, přidání nové události, vlastnosti, jej můžete použít a metody pro odeslání vašeho objektu, jako by šlo o MFC OLE ovládacího prvku. To je řazení z užitečné.

MfcAxscrVb udržuje provádění odeslání mechanismy, odděleně od objektu MFC, které je skutečně odkazující na objekt. Například dialogového okna obsahuje tlačítko „ AButton,"která je použitelné ve skriptech volat. Objekt tlačítka MFC je CButton. Třídy odvozené CCmdTargetPlus, CAButtonDispatch, je zvláštní a rozdílné. Toto je umístění klíče. Pouze co programátor hostitele explicitně rozhodne zpřístupnit pro základní MFC objektů a ovládací prvky systému Windows budou použitelné ve skriptech.

CEventsButton, CEventsEdit, CeventsListBox:

Pro události tam musí být některé kódy, které odpovídá systému Windows událost--vyslovte, po klepnutí na tlačítko--a vygeneruje událost pro skriptovací stroj. (Nezapomeňte že událost je odeslání Invoke na rozhraní zpracována spojovací body v hostitelském objektu.) Tento příklad provede to přidáním standardní obslužné rutiny zpráv MFC do odvozené z různých tříd objektů. Každý z těchto obslužné rutiny má pouze k volání FireEvent (courtesy kódů přidán do CCmdTargetPlus) k odeslání objektu. Všechno ostatní dojde automaticky.

Vzhledem k tomu, že odeslání objektu a objekt skutečné okno MFC jsou samostatné v tomto vzorku, musí explicitně společně zapojení dvou nadřazeného dialogové okno. To se provádí v konstruktoru Mfcaxscrvbdlg.

Pojmenované položky

Po odeslání objektů, musíte je nastavit tak, aby skriptovací stroj ví o nich. Kolekce objektů všechny pojmenované odeslání, skriptovací stroj ví o se nazývá Namespace skript"." Položky jsou přidány do oboru názvů skriptu pomocí metody IActiveScript::AddNamedItem. Jak lze již bylo zmíněno dříve, je povinnost hostitele IDispatch pro objekt implementovat a podporovat informace typu prostřednictvím ITypeInfo pro objekt. Při skriptovací stroj potřebuje přeložit odkaz na pojmenovanou položku, používá metodu IActiveScriptSite::GetItemInfo k požádat ukazatel myši IUnknown, (což dotáže hlavně pro rozhraní IDispatch) a ukazatel ITypeInfo.

Není vše, který hostitel chce být použitelné ve skriptech musí být pojmenované položky. Hostitel bude mají obvykle hierarchii objektů, kde jsou přístupné prostřednictvím objektu vyšší úrovně sub-objects. Je běžné metaphor aplikace-> dokumentu-> zboží hierarchii, kde objekt dokumentů je přístupné z nejvyšší úrovně objektu Application jako vlastnost IDispatch samotného objektu Application. Stejným způsobem samotný objekt dokumentu zpřístupňuje několik sub-objects a každý je zboží, které lze získat prostřednictvím matici zboží nebo jiných contrivance.

Použití tohoto režimu, skriptovací stroj je inteligentní dostatečně Chcete-li přejít podřízenou při kód skriptu následující říká bez nutnosti dokumentu nebo položky mají být přidány do oboru názvů skriptu:
Set Obj = Application.Document.Item(1)
				
, jak dlouho, dokud sub-objects jsou zpřístupněna jako get vlastnosti jejich nadřazeného objektu, skriptovací stroj zjistí je úspěšně. Skriptovací stroj je dostatečně, interestingly možné "předpokládá" položku nejvyšší úrovně v hierarchii. Co to znamená, že jestliže aplikace je deklarována jako položka nejvyšší úrovně, pak je dostačující vyslovte následující kód předchozí skript:
Set Obj = Document.Item(1)
				
Toto je přesně jak aplikace Internet Explorer 3.0 umožňuje kódu skriptu v kontextu objektu okna bez vždy prefixu všechny odkazy na objekty s "Windows" Script host je nutné identifikovat položku nejvyšší úrovně skriptu ve volání AddNamedItems pomocí příznak SCRIPTITEM_GLOBALMEMBERS. Co obvykle není provedené zrušte dokumentaci aktivní skriptování, ale je pouze pojmenované položky lze podporující události. Použití výše uvedený příklad, tam je žádné syntaxe vyslovit následující zpracovat událost v určité položky:
   Sub Application.Document.Item(1)_OnEvent ' this doesn't work!
				
So, k MfcAxscrvbdlg, protože Chceme být schopny zpracovat události všech objektů v hierarchii, každý objekt je přidán jako pojmenovaná položka. Každý objekt je také přístupný prostřednictvím nejvyšší úrovně Scripter objektu (okně samotného), který nepodporuje aktuálně události.

Ovládací prvek WebBrowser:

V tomto vzorku script host poskytuje pouze jeden objekt externího oboru názvů skriptu. Toto je ovládací prvek WebBrowser hostované v dialogovém okně prvku MFC výchozí ovládací prvek uzavření podporu. Stačí je AddRef d odeslání ukazatel na ovládací prvek a nastavíte práci. Externí objekt pro události, musí vystavit ukazatel ITypeInfo nějakým způsobem. MfcAxscrVb to získává prostřednictvím IProvideClassInfo::GetClassInfo. Jako poslední možnost by mohl číst hostitele objektu-informace typu sám vystavit ITypeInfo. Ovládací prvek WebBrowser Naštěstí, podporuje GetClassInfo, tak MfcAxscrVb nelze provést.

Pokud jste chtěli přidat jiné objekty externí automatizaci do oboru názvů, všechny je obvykle nutné je získat pomocí metody CoCreateInstance rozhraní IUnknown. Případně hostitele může podporovat obecný prostředek pro získání externí objekty byť 1, nemusíte mít zpracování událostí. V jazyce Visual Basic Chcete-li tuto funkci nazývá CreateObject.

Získání do jiné aplikace: HostCreateObject

Než sadu vlastností použít k vystavení všechny podřízené objekty hlavní objekt Scripter (třída dialogové okno Vlastní) zpřístupní pouze jednu zvláštní metody. Tato metoda ukazuje že jednoduchého rozumí pro simulaci funkce CreateObject jazyka Visual Basic společnosti. Všimněte si, že metoda s názvem HostCreateObject zdůraznit tato metoda je dodáván volného skriptovacím strojem, ale hostitel musí implementovat ho sám. Někteří hostitelé jasně by není tato možnost stanovit z bezpečnostních důvodů, IE3 je prvořadým příklad. Primární cílem HostCreateObject je vrátíte odeslání ukazatel požadovaný objekt. Jakmile ukazatel odeslání skriptovací stroj zná co dělat, odtud.

Poznámka: jako verze 2.0, stroje jazyků VBScript a JScript nyní podporují jako integrovaná funkce CreateObject. Hostitel není nutné k provedení této funkce. Tato funkce bude však test objektu přesvědčte se, zda že je bezpečný pro skriptování před povolením objektu, který chcete použít. Považovat objekty za samy bezpečné pro skriptování podporující rozhraní IObjectSafety nebo označení položky registru příslušné kategorie komponenty pro bezpečný pro skriptování. Odkazují na Microsoft Knowledge Base další informace.

Třída Průvodce podpora

Poslední málo bit trickery v MfcAxscrVb je manipulace, přijata na podporu ClassWizard. Třída průvodce, technicky není "vlečný." Je právě duševně napadeny. Je poměrně vhodné pro co ji provede, ale nezapomeňte, že právě blindly prohledá soubory, které hledají tyto zvláštní komentáře ClassWizard. Postupujete-li formát pro COleControl, je mohou pouze o get zaskladnění pomocí funkce automatizace a události ClassWizard na karty.

Jeden complication je MfcAxscrVb používané odvození v některých jeho hierarchie objektů. Všechny objekty tlačítko jsou odvozeny z běžných CButtonDispatch objekt, který poskytuje vlastnosti a metody, které by ji jednotlivě podporují. Však pokud jde o čas k vyplnění souboru .odl, každý jednotlivý objekt musí obsahovat všechny vlastnosti a metody nadřazené třídy. Needless to znamená to bude zmást Průvodce třídy, pokud jde o číslo DISPIDs dobu. Pokud jste Průvodce třídy, zajistěte, zkontrolujte generované DISPIDs na dvou místech: v souboru .odl třídy automatizace a výčet uvnitř definice třídy. Při práci s třídami odvozené tlačítko, je snadné viz stejné DISPID přiřazeno více vlastností a metod. Je mnohem snazší opravit DISPIDs, však než přidejte vše podle začátku, tak funkce byly opustil v MfcAxscrVb.

Visual C++ 5.0 vylepšenou podporu IDL metod a vlastností prostřednictvím ClassView je vyhodit nahoru, zda je potřeba ClassWizard či nikoli. Ale MfcAxscrVb podporuje nyní. Užijte si.

Dodatek A: objektový model

Scripter:

Toto je hlavní objekt, z nichž jsou odvozeny všechny ostatní objekty. "IMfcaxscrvbDlg" v souboru .odl je ale se doplňuje jako pojmenovaná položka "Scripter". Má jednu metodu HostCreateObject, což je popsáno výše.

Tlačítko objekty:

AButton BButton, CancelButton, OKButton, RunScript

Vlastnosti
  • Titulek: Text tlačítka plošky.
Metody Stiskněte klávesu: Pracuje, jako kdyby byly tlačné na tlačítko.
  • Stiskněte klávesu: Pracuje, jako kdyby byly tlačné na tlačítko.
Události
  • Při klepnutí: Aktivována, když se posune tlačítko.
  • OnMouseOver: Aktivována, když myší přejíždí přes tlačítko.
  • OnFocus(bSet): Aktivována, když je dán fokus nebo z tlačítka.
BroCon:

BroCon je název ovládacího prvku WebBrowser v dialogovém okně. Podporuje všechny vlastnosti a metody, jak je uvedeno v sadě SDK Internet Client SDK/ActiveX ovládacího prvku WebBrowser.

EditCon:

Metody
  • Přidá AppendLine(strToAdd): strToAdd, chcete-li ukončit úpravy textu okna.
  • InsertLine (strToAdd, nkde): Přidá strToAdd v #nWhere řádku.
  • RemoveLine(nWhere): # nWhere řádku odebere z okno úprav.
Události
  • OnMouseOver: Aktivována, když myší přejíždí přes okno.
  • OnChar(strChar): Aktivována, když strChar znak zadána do okna.
  • OnFocus(bSet): Aktivována, když je dán fokus nebo z tlačítka.
Lbox:

Metody
  • AddString(strIn): StrIn přidá do seznamu.
  • ClearList: Vymaže všechny řetězce z rozevíracího seznamu.
  • RemoveString(strRemove): Odstraní první instance StrRemove a odebere ji z rozevíracího seznamu.
  • SelectString(strSelect): Vybere řetězec určený strSelect.
Události
  • OnMouseOver: Aktivována, když myší přejíždí přes okno.
  • OnFocus(bSet): Aktivována, když je dán fokus nebo z tlačítka.
  • OnSelCancel(strCancelled): Při výběru je zrušena v strCancelled prvek pole seznamu.
  • OnSelChange(strChange): Pokud strChange prvek pole seznamu je vybrané uživatelem.

Vlastnosti

ID článku: 168214 - Poslední aktualizace: 7. února 2014 - Revize: 2.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Internet Explorer 3.01
  • Microsoft Internet Explorer 3.02
  • 128bitová verze aplikace Microsoft Internet Explorer 4.0
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Visual Basic, Scripting Edition 1.0
  • Microsoft Visual Basic, Scripting Edition 1.1
  • Visual Basic, Scripting Edition 2.0
  • Microsoft Foundation Class Library 4.2 na těchto platformách
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
Klíčová slova: 
kbnosurvey kbarchive kbmt kbdownload kbfile kbinfo kbsample KB168214 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:168214

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com