|
|
|
Vediamo come trasformare la nostra applicazione
in un ActiveX (plug-in per Internet Explorer, etc… ) |
|
|
|
|
|
|
|
Per comodità creeremo un progetto dentro lo
stesso workspace dell’applicazione |
|
Per questo: |
|
Aprire il progetto Graphedit |
|
Creare un nuovo (activex) nello stesso
workspace. |
|
|
|
|
|
Nel tab di visualizzazione appaiono due
progetti. |
|
|
|
|
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). |
|
|
|
|
Il sistema costruisce un activex banale, che non
risponde a nessun messaggio e si visualizza con un ellisse. |
|
|
|
|
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 |
|
|
|
|
Il codice che riguarda il grafo e’ tolto dal
documento e inserito in grafocore.h e grafocore.cpp |
|
|
|
|
|
|
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. |
|
|
|
|
|
|
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); |
|
|
|
|
Drag_arc ha bisogno della finestra su cui
disegnare |
|
Draw ha bisogno della finestra e del grafo |
|
|
|
|
Selezionamo l’activex come progetto corrente |
|
Aggiungere i file grafo e draw al progetto (in
questo modo sono condivisi da due progetti). |
|
|
|
|
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; |
|
|
|
|
Attraverso il classwizard aggiungiamo i gestori
dei messaggi del mouse |
|
Nel controllo utilizzeremo il tasto destro per
cambiare modo di inserimento (archi-nodi) |
|
|
|
|
Copiamo il codice di findnode |
|
Una migliore implementazione avrebbe incapsulato
findnode nel file grafocore |
|
Sarebbe stato necessario definire la classe
grafo (lasciato per esercizio). |
|
|
|
|
Aggiungo funzioni addnode ,addarc |
|
|
|
|
Al contrario delle finestre di applicazione
l’activex non cancella lo sfondo. |
|
|
|
E’ necessario quindi aggiungere un comando di
cancellazione dello sfondo. |
|
|
|
|
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 |
|
|
|
|
Sempre nel caso in cui l’activex non e’ una
finestra bisogna sostituire |
|
UpdateAllViews(0); o InvalidateWindow() |
|
con |
|
InvalidateControl(); |
|
|
|
|
|
|
|
La trattazione degli activex e’ solo accennata. |
|
Manca: |
|
La gestione delle proprieta’ |
|
Il passaggio di parametri |
|
L’installazione e la pubblicazione su web |
|
|
|
|
Un esempio: plyviewctrl |
|
|
|
In questo caso non si puo’ utilizzare un activex
senza finestra (il driver opengl e’ collegato alla finestra). |
|
|
|
|
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 |
|