ESEMPIO: MFCAxs.exe implementa un host Script ActiveX con MFC

Traduzione articoli Traduzione articoli
Identificativo articolo: 168214 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo Ŕ stato archiviato. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

MFCAxs.exe Ŕ un esempio che contiene MfcAxscrVb. MfcAxscrVb Ŕ un host di Active Scripting esempio istruzioni scritte utilizzando MFC. Che ospita la DLL di VBScript; tuttavia, i meccanismi di scripting sono generici al motore di scripting. MfcAxscrVb viene illustrato solo un modo possibile per fornire oggetti di invio da host, per implementare interfacce Active Scripting dell'host di e per connettere i messaggi delle finestre nell'host con gli eventi generati al motore di script.

MfcAxscrVb include il file dell'area di lavoro e di progetto Visual c ++ 5.0. Sebbene venga fornito nÚ mdpfile makefile compatibile di VC ++ 4.2, il codice sorgente per MfcAxscrVb Ŕ compatibile con MFC 4.2b.

Prerequisiti: COM, automazione

Informazioni

Il seguente file Ŕ disponibile per il download dall'Area download Microsoft:
MFCAxs.exe
Per ulteriori informazioni su come scaricare file di supporto Microsoft, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
119591Come ottenere file di supporto Microsoft dai servizi online
Microsoft analizzati questo file per individuare eventuali virus. Microsoft ha utilizzato il software antivirus pi¨ recente disponibile alla data di pubblicazione del file. Il file Ŕ archiviato in server con protezione avanzata per impedire modifiche non autorizzate al file.

Esecuzione del campione

Quando si esegue l'esempio MfcAxscrVb si noterÓ un controllo di modifica di grandi dimensioni nell'angolo superiore sinistro dell'applicazione. ╚ possibile incollare o script di tipo in questa finestra e selezionare il "Esegui script" pulsante per richiamare lo script. Numerosi script di test vengono fornite nei file Script.txt e testevents.txt.

L'host di esposizione: dispatch oggetti

L'obiettivo principale di questo esempio Ŕ l'implementazione di oggetti di invio utilizzando MFC. Il motivo per questo Ŕ semplice. Un linguaggio di script non Ŕ molto utile se non c'Ŕ niente da script.

La tecnologia di base da cui tutti i Scripting dipende Ŕ la maggior parte delle certamente automazione. Una conoscenza a tinta unita di automazione Ŕ assolutamente necessaria prima di qualsiasi host Active Scripting del codice. Esistono diversi riferimenti valido per l'automazione: capitoli 14 e 15 di "Inside OLE di Brockshmidt," Capitolo 11 di Dale Rogerson "Inside COM" e "OLE Automation Programmer Reference".

CCmdTargetPlus:

Le informazioni necessarie sono alcuni oggetti che consentono di proprietÓ e metodi tramite IDispatch inoltre generano eventi di script. MFC non sicuramente la maggior parte del lavoro noioso durante l'implementazione di interfacce dispatch per un oggetto COM. Tuttavia, l'unica classe MFC che supporta le interfacce dispatch in ingresso e in uscita interfacce dispatch o event sink, Ŕ COleControl. COleControl Ŕ molto troppo sporgenti che si desidera. ╚ solo gli eventi, un'interfaccia dispatch e digitare le informazioni. VBScript deve leggere informazioni di tipo per gli oggetti di invio che supportano gli eventi. ╚ possibile creare questo in tempo reale, o creare una libreria tipo statico per gli oggetti di invio dell'host di e ottenere il ITypeInfo per ogni singolo oggetto.

Mentre potrebbe non essere necessario, MfcAxscrVb dispone di una una classe base denominata CCmdTargetPlus che supporta questi tre tipi: interfaccia, punti di connessione con una mappa eventi stile del controllo e le informazioni di tipo facilmente accessibili tramite IProvideClassInfo di invio. Gran parte del codice in CmdTargetPlus Ŕ stato aggiunto per consentire per le mappe eventi, che consente di aggiunta di eventi per derivata classi molto pi¨ semplice.

dispatch oggetti:

Tutti gli oggetti fornito dall'host di invio vengono implementati utilizzando CCmdTargetPlus. Esistono alcuni aspetti che sono necessarie per funziona correttamente. Per un standard su che cosa Ŕ necessario fare riferimento a tutti gli oggetti dispatch (CAButtonDispatch, CBButtonDispatch e cosý via). Riportato un breve riepilogo sul modello a oggetti del MfcAxscrvb Ŕ elencato alla fine di questo documento.

Se si aggiungono oggetti personalizzati, assicurarsi di controllare per tre GUID univoci per le interfacce di eventi primario e di invio principale e per il clsid per l'oggetto nella somma. Deve essere eseguita nel file di implementazione e nel file ODL. (Taglia e Incolla consente qui). Tagliare e incollare tutte le macro classe procedura guidata e modificarle quindi il nuovo nome della classe. Guidata classe Ŕ molto particolari, ma se si segue tutto solo destra ODL, h e cpp, file, Ŕ possibile utilizzarlo per aggiungere nuovi eventi, proprietÓ, e che i metodi per l'invio di oggetto come se fosse un OLE controllo MFC. Si tratta di ordinamento di utile.

MfcAxscrVb mantiene l'oggetto che implementa i meccanismi di dispatch separati dall'oggetto MFC, che effettivamente fa riferimento a. Ad esempio, la finestra di dialogo ha un pulsante denominato il "AButton," che Ŕ utilizzabile tramite script. L'oggetto del pulsante MFC Ŕ CButton. La classe derivata CCmdTargetPlus, CAButtonDispatch, Ŕ separato e distinto. Questo Ŕ un punto chiave. Solo ci˛ che il programmatore di host in modo esplicito sceglie di esporre per oggetti MFC di base e controlli Windows sarÓ utilizzabile tramite script.

CEventsButton, CEventsEdit, CeventsListBox:

Per gli eventi, Ŕ necessario essere il codice che risponde a un Windows evento--pronunciare, un pulsante--e genera un evento per il modulo di gestione di script. (Ricordare che un evento Ŕ un Invoke su un'interfaccia gestita da punti di connessione nell'oggetto host di invio). In questo esempio esegue questa operazione aggiungendo i gestori di messaggi MFC standard in oggetti derivati da diverse classi. Semplicemente ciascuno di questi gestori dispone di chiamare FireEvent (del codice aggiunto CCmdTargetPlus) sull'oggetto dispatch. Tutto il resto viene eseguita automaticamente.

PoichÚ l'oggetto di invio e l'effettivo oggetto finestra MFC sono distinti in questo esempio, Ŕ necessario il padre della finestra di dialogo in modo esplicito collegare insieme i due. Questa operazione viene eseguita nel costruttore Mfcaxscrvbdlg.

Elementi denominati

Dopo avere oggetti dispatch, Ŕ necessario impostare in modo che il modulo di gestione di script su di essi. L'insieme di tutti gli oggetti denominati invio che il modulo di gestione di script Ŕ a conoscenza Ŕ in Ŕ di denominato "Namespace Script". Elementi vengono aggiunti allo spazio dei nomi script tramite il metodo IActiveScript::AddNamedItem. Come giÓ anticipato, Ŕ imposta dell'host di implementare IDispatch per l'oggetto e supportare informazioni sul tipo tramite ITypeInfo per l'oggetto. Quando il modulo di gestione di script Ŕ necessario risolvere un riferimento a un elemento denominato, viene utilizzato il metodo di IActiveScriptSite::GetItemInfo per richiedere un puntatore IUnknown (che richiede principalmente per IDispatch) e un puntatore ITypeInfo.

Non tutto ci˛ che un host desidera utilizzabile tramite script deve essere un elemento denominato. In genere Ŕ possibile che l'host avrÓ una gerarchia di oggetti, in cui oggetti secondari accessibili tramite un oggetto di livello superiore. Una metafora comune Ŕ l'applicazione-> documento-> gerarchia di elementi, in cui l'oggetto di documento Ŕ accessibile dall'oggetto Application principale come proprietÓ IDispatch dell'oggetto applicazione stesso. Allo stesso modo, l'oggetto del documento stesso espone diversi oggetti secondari, e ognuno Ŕ un elemento che Ŕ possibile ottenere tramite una matrice di elementi o altri contrivance.

Utilizzando questo schema, il motore di script Ŕ smart abbastanza per passare a un sottoelemento quando il codice di script indica che le seguenti operazioni senza documenti o elementi da aggiungere allo spazio dei nomi script:
Set Obj = Application.Document.Item(1)
				
come purchÚ gli oggetti secondari vengono esposti come proprietÓ di lettura del relativo oggetto padre, il modulo di gestione di script rileva tali correttamente. L'aspetto interessante Ŕ che, il modulo di gestione di script Ŕ in grado "si supponga" l'elemento nella gerarchia di primo livello. Ci˛ significa che se applicazione viene dichiarato come elemento principale, quindi Ŕ sufficiente pronunciare i seguenti per il codice script precedente:
Set Obj = Document.Item(1)
				
Ŕ esattamente come Internet Explorer 3.0 consente a codice di script nel contesto dell'oggetto Window senza prefisso sempre tutti i riferimenti agli oggetti con "Finestra". Un host di script Ŕ necessario identificare l'elemento di script principale nella chiamata a AddNamedItems utilizzando il flag SCRIPTITEM_GLOBALMEMBERS. Ci˛ che in genere non viene liberato deselezionare per la documentazione di scripting, tuttavia, Ŕ denominato solo elementi pu˛ supportare eventi. Non utilizzando l'esempio precedente, Ŕ sintassi ad esempio le operazioni seguenti per gestire un evento in un particolare elemento:
   Sub Application.Document.Item(1)_OnEvent ' this doesn't work!
				
pertanto, per MfcAxscrvbdlg, poichÚ si desidera poter gestire gli eventi di ogni oggetto nella gerarchia, ogni oggetto viene aggiunto come un elemento denominato. Ogni oggetto Ŕ anche accessibile mediante l'oggetto script principale (la finestra di dialogo stessa), che non supporta gli eventi attualmente.

controllo WebBrowser:

In questo esempio, l'host di script espone un solo oggetto esterno allo spazio dei nomi script. Si tratta del controllo WebBrowser ospitato nella finestra di dialogo controllo contenimento supporto MFC predefinito. ╚ sufficiente un AddRef sarebbe inviare un puntatore al controllo e Ŕ impostata. Per gli eventi, l'oggetto esterno deve esporre un puntatore ITypeInfo in qualche modo. MfcAxscrVb ottiene questo IProvideClassInfo::GetClassInfo. Come ultima risorsa, un host potrebbe leggere il tipo di informazioni dell'oggetto per esporre un ITypeInfo. Per fortuna, il controllo WebBrowser supporta GetClassInfo, in modo non MfcAxscrVb questo.

Se si desidera aggiungere altri oggetti di automazione esterna allo spazio dei nomi, in genere Ŕ necessario Ŕ per ottenere un'interfaccia IUnknown utilizzando CoCreateInstance. In alternativa, l'host pu˛ supportare in modo generico per ottenere oggetti esterni, ma quelle che non devono disporre di eventi gestiti. In Visual Basic, Ŕ Ŕ che la funzione per eseguire questa operazione chiamata CreateObject.

Informazioni su altre applicazioni: HostCreateObject

Diversi dal set di proprietÓ utilizzate per esporre tutti gli oggetti figlio, l'oggetto di script principale (la classe finestra di dialogo stessa) espone un solo metodo speciale. Questo metodo viene illustrato che un semplice significa per simulare la funzione CreateObject di Visual Basic. Si noti che il metodo Ŕ denominato HostCreateObject per sottolineare che questo metodo non viene fornito gratuitamente dal motore di script, ma l'host implementi stesso. Alcuni host chiaramente potrebbe non voler consentire per motivi di protezione, IE3 Ŕ un esempio. L'obiettivo principale di HostCreateObject Ŕ per restituire il puntatore di invio dell'oggetto richiesto. Una volta che il motore di script ha il puntatore dispatch, sa che cosa fare da tale posizione.

Nota : nome della versione 2.0, i motori VBScript e JScript supportano ora CreateObject come una funzione incorporata. L'host non Ŕ necessario implementare questa funzione. Questa funzione verrÓ, tuttavia, verificare un oggetto per assicurarsi che sia sicuro prima di consentire l'oggetto da utilizzare. Gli oggetti stessi riterranno sicuri per lo script da supportare l'interfaccia IObjectSafety o contrassegnare le voci del Registro di sistema di Component Category appropriate per Safe-for-scripting. Fare riferimento della Microsoft Knowledge Base per ulteriori informazioni.

Supporto della procedura guidata classe

Il bit di poco ultimo di trickery in MfcAxscrVb Ŕ la modifiche apportate per supportare ClassWizard. Classe di creazione guidata, tecnicamente non "tipo dumb". ╚ sufficiente mentally richieste. ╚ molto utile per che cosa viene, ma Ŕ importante ricordare che ricerca solo ciecamente file cercare tali commenti classe speciale. Se si segue il formato per COleControl, Ŕ possibile solo su get stoccaggio con eventi e automazione della creazione guidata classe schede.

Una complicazione Ŕ che MfcAxscrVb utilizza derivazione nella parte della gerarchia di oggetti. Tutti gli oggetti pulsante sono derivati da un oggetto CButtonDispatch comune che espone proprietÓ e metodi, che ognuno dei quali Ŕ sarebbe singolarmente supporti. Tuttavia, per quanto riguarda tempo per compilare il file ODL, ogni singolo oggetto deve contenere tutte le proprietÓ e i metodi della classe padre. Inutile a dirsi, questo verrÓ confondere la creazione guidata classe quando si ha tempo per numerare i DISPID. Se si utilizza Creazione guidata classe, verificare controllare i DispId generati in due posizioni: file di classe di automazione e l'enumerazione all'interno della definizione di classe ODL. Quando si lavora con le classi derivate pulsante, Ŕ facile visualizzare il DISPID stesso assegnato a pi¨ proprietÓ e metodi. ╚ molto pi¨ semplice correggere i DISPID, tuttavia, a per aggiungere tutti gli elementi da zero, pertanto la funzionalitÓ Ŕ stata lasciata in MfcAxscrVb.

Con supporto migliorato del Visual c ++ 5.0 di IDL metodi e proprietÓ attraverso la visualizzazione delle classi, Ŕ un buttare voluto backup se la classe Ŕ necessario o non. Ma MfcAxscrVb supporta per ora. Divertirsi con.

Appendice A: modello a oggetti

script:

Questo Ŕ l'oggetto master da cui derivano tutti gli altri oggetti. ╚ "IMfcaxscrvbDlg" nel file ODL ma viene aggiunto come l'elemento denominato "Script". Dispone di un metodo, HostCreateObject descritta sopra.

oggetti Button:

AButton BButton, RunScript CancelButton, OKButton,

ProprietÓ
  • Didascalia: Testo del pulsante.
metodi Premere: Comportamento come se il pulsante sono stato premuto.
  • Premere: Comportamento come se il pulsante sono stato premuto.
eventi
  • OnClick: Vengono generati quando il pulsante Ŕ premuto.
  • OnMouseOver: Vengono generati quando si esegue il mouse sul pulsante.
  • OnFocus(bSet): Generati quando viene fornito lo stato attivo o ricavata dal pulsante.
BroCon:

BroCon Ŕ il nome del controllo WebBrowser nella finestra di dialogo. Supporta tutti i metodi come descritto in Internet Client SDK/ActiveX SDK per il controllo WebBrowser e le proprietÓ.

EditCon:

metodi
  • AppendLine(strToAdd): Aggiunge strToAdd alla fine della finestra di modifica del testo.
  • InsertLine (strToAdd, nWhere): aggiunge strToAdd al #nWhere di riga.
  • RemoveLine(nWhere): Rimuove # nWhere riga dalla finestra di modifica.
eventi
  • OnMouseOver: Vengono generati quando mouse si muove sopra finestra.
  • OnChar(strChar): Vengono generati quando viene immesso strChar carattere nella finestra.
  • OnFocus(bSet): Generati quando viene fornito lo stato attivo o ricavata dal pulsante.
Lbox:

metodi
  • AddString(strIn): Aggiunge StrIn nella casella di riepilogo.
  • ClearList: Cancella tutte le stringhe dalla casella di riepilogo.
  • RemoveString(strRemove): Rimuove la prima istanza di StrRemove e lo rimuove dalla casella di riepilogo.
  • SelectString(strSelect): Seleziona stringa specificata dalla strSelect.
eventi
  • OnMouseOver: Vengono generati quando mouse si muove sopra finestra.
  • OnFocus(bSet): Generati quando viene fornito lo stato attivo o ricavata dal pulsante.
  • OnSelCancel(strCancelled): Quando selezione viene annullata in un strCancelled di elemento di casella di elenco.
  • OnSelChange(strChange): Quando un strChange di elemento di elenco casella Ŕ selezionata per l'utente.

ProprietÓ

Identificativo articolo: 168214 - Ultima modifica: mercoledý 5 febbraio 2014 - Revisione: 2.2
Le informazioni in questo articolo si applicano a:
  • Microsoft Internet Explorer 3.01
  • Microsoft Internet Explorer 3.02
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • 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áalle seguenti piattaforme
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
Chiavi:á
kbnosurvey kbarchive kbmt kbdownload kbfile kbinfo kbsample KB168214 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 168214
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

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