Note
Struttura
Realizzazione Activex
Vediamo come trasformare la nostra applicazione in un ActiveX (plug-in per Internet Explorer, etc… )
Creare un progetto
Per comodità creeremo un progetto dentro lo stesso workspace dell’applicazione
Per questo:
Aprire il progetto Graphedit
Creare un nuovo (activex) nello stesso workspace.
Creare il Progetto
Due Progetti
Nel tab di visualizzazione appaiono due progetti.
Testare l’activeX
L’activex non e’ un applicazione a se stante
Per poterla testare e’ necessario inserirla in un contenitore di activex
Si puo’ utilizzare il test-contanier dell’ambiente di sviluppo oppure una pagina web (Provare con Front-Page).
ActiveX di default
Il sistema costruisce un activex banale, che non risponde a nessun messaggio e si visualizza con un ellisse.
Astrarre l’applicazione
Per realizzare l’activex con lo stesso codice dell’applicazione, e’ necessario ristrutturare l’applicazione stessa.
I file grafocore conterranno la struttura dati del grafo
I file dracore conterrano il codice base in visualizzazione e interfacciamento
Modifiche al Documento
Il codice che riguarda il grafo e’ tolto dal documento e inserito in grafocore.h e grafocore.cpp
Modifiche alla view
Il codice di basso livello e tolto dalla view e inserito nella classe drawcore
La classe drawcore sara’ utilizzata sia dall’applicazione che dall’activex.
Menbri di drawcore
void drag_arc(CWnd * wnd );
void OnDraw(CDC* pDC,
svector<Node> & nodes,
svector<Arco> & arcs
);
void OnLButtonDown(UINT nFlags, CPoint point);
void OnMouseMove(UINT nFlags, CPoint point);
void OnLButtonUp(UINT nFlags, CPoint point);
Note:
Drag_arc ha bisogno della finestra su cui disegnare
Draw ha bisogno della finestra e del grafo
Torniamo all’activex
Selezionamo l’activex come progetto corrente
Aggiungere i file grafo e draw al progetto (in questo modo sono condivisi da due progetti).
Modifiche al controllo
Nel file controllo.h includiamo il grafo e la classe drawcore (in questo caso non c’e’ la divisione fra documento e view!)
#include "..\\grafocore.h"
#include "..\\drawcore.h"
svector<Node> nodes;
svector<Arco>  arcs;
Aggiunta gestori messaggi
Attraverso il classwizard aggiungiamo i gestori dei messaggi del mouse
Nel controllo utilizzeremo il tasto destro per cambiare modo di inserimento (archi-nodi)
Funzioni Ex Documento
Copiamo il codice di findnode
Una migliore implementazione avrebbe incapsulato findnode nel file grafocore
Sarebbe stato necessario definire la classe grafo (lasciato per esercizio).
Funzioni Ex Documento
Aggiungo funzioni addnode ,addarc
Note su draw
Al contrario delle finestre di applicazione l’activex non cancella lo sfondo.
E’ necessario quindi aggiungere un comando di cancellazione dello sfondo.
Note sugli activex
Gli activex possono essere finestre oppure no.
Se sono finestre tutto bene.
Se non sono finestre, fanno riferimento alla finestra che gli contiene.
Nel secondo caso getdc e modificata in modo tale da recuperare il contesto dalla finestra padre
Note su activex
Sempre nel caso in cui l’activex non e’ una finestra bisogna sostituire
UpdateAllViews(0); o InvalidateWindow()
con
InvalidateControl();
Activex
La trattazione degli activex e’ solo accennata.
Manca:
La gestione delle proprieta’
Il passaggio di parametri
L’installazione e la pubblicazione su web
Un activex in OpenGl
Un esempio: plyviewctrl
In questo caso non si puo’ utilizzare un activex senza finestra (il driver opengl e’ collegato alla finestra).
Contatti
Claudio Rocchini
Istituto di Elaborazione dell’informazione
CNR, Area Ricerca di Pisa
Email: rocchini@iei.pi.cnr.it
Web: http://vcg.iei.pi.cnr.it/~rocchini
Tel. 0503152926