Newsgroup: it.comp.programmare.win32
Titolo: Applicazione MDI e nuova vista

Stņ realizzando un editor/simulatore grafico e volevo creare una copia del
CDocument per ogni nuova vista, per meglio gestire la simulazione.
Come posso creare un nuovo CDocument (copia del precedente) alla richiesta
di una nuova vista dello stesso?
Per creare la copia non avrei problema, ma non riesco a capire come
intercettare la nuova vista, e associarla alla copia del CDocument.
Grazie a tutti      Matteo

 Stň realizzando un editor/simulatore grafico e volevo creare una copia del

Sei sicuro che ti torni utile quanto stai chiedendo?
L'architettura Documento/vistE (n.b. il plurale) serve ad isolare
i dati dalla/e loro rappresentazione/i.
P.Es. un oggetto tridimensionale (descritto dai dati in CDocument)
puň avere molte viste (fronte, alto, lato, prospettiva ecc.)
Non si dovrebbe mai ragionare al contrario.
Con la creazione di un altro CDocument gemello si istanzia
una seconda e distinta simulazione.
Se č proprio questo che cercavi di fare 
per sapere come creare e trattare piů CDocument
ti basta studiare come sono fatte le applicazioni MDI
(Multiple Document Interface)(vedi testi o l'MSDN).
Saluti
JJ
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Grazie e scusa per il ritardo.    Matteo

 Grazie e scusa per il ritardo.    Matteo
Figurati, sono ancora vivo!


Tutto nasce dal fatto che devo costruire una applicazione MDI, e quindi un
utente può eseguire eseguire / editare più documenti diversi alla volta.
Quando ho documenti diversi nessun problema, ma il problema nasce quando
associo più viste allo stesso documento. Questo perchè nella stessa vista
posso editare, oppure simulare, (abilitando i tasti della simulazione,
disabilito quelli per editare e viceversa). .
Praticamente rappresenta il caso 2 da te descritto senza la classe
CSimulazione (Ed è per questo che 2 viste incasinano il CDocument comune :)
Il problema verrebbe facilmente risolto creando una copia del CDocument
(inizializzato a quello principale) ogni volta che creo una nuova vista, in
modo da aver per ogni documento una sola vista, e dal quel punto in poi,
trattati ovviamente come oggetti indipendenti. Sarebbe l'uovo di Colombo,
perchè altrimenti sarei costretto ad avere due viste identiche (bloccando
l'editing), visto che se modifico una vista( e quindi il CDocument comune)
mentre l'altra è in simulazione, otterrei cose strane.
Ciao Matteo



 
Indubbiamente.
Ma puoi gestire le viste controllando un "permesso" per fare modifiche.
Ammettiamo di avere 2 View che vogliono modificare il modello per
la simulazione (dati del CDocument ovviamente).
La View 1 chiede di avere il controllo sui dati del CDocument
interrogando una variabile, diciamo BOOL bPermesso, del CDocument stesso.
Se bPermesso č TRUE allora lo si setta FALSE e parte la sessione di
modifiche della View 1 verso il CDocument...
Nel frattempo la View 2 chiede di fare la stessa cosa ma
trova bPermesso = FALSE per cui non gli č concesso niente e la conguenza 
č salva.
Cosě solo una View alla volta puň modificare CDocument.
Tecnicamente vuol dire "gestire la concorrenza" e la risorsa 
condivisa č l'insieme delle variabili per la simulazione del CDocument.
Ti consiglio di usare gli espedienti classici contemplati nella
programmazione multithread per gestire la variabile bPermesso o chi
per lei (Sezioni critiche, Eventi, ecc.).
Puň andare?
Saluti
JJ

 JJ
Grazie di tutto Matteo