Newsgroup: it.comp.programmare.win32
Titolo: Linee

Scusate, immagino sia una domanda ovvia anche questa, ma per me non lo č.
Dove fare una normalissima linea sul form, che deve sempre esserci. In VB
usavo direttamente il controllo che c'era sulla barra degli strumenti, in
VC++ non č possibile? Sul libro che ho scrivono come farla, ma utilizzano un
sacco di codice, č l'unico modo?
Grazie e ciao.
Luca

 Luca
ciao

 ciao
ciao
Luca
P.S.
Devo metterla nella OnInitDialog?

 Graie cmq della risposta.
ciao.
.

 wrote in message
news:a0d8fo$604$1...@news.ngi.it...


Scusa se ti sto bombardando di domande, ma è possibile cambiare l'unità di
misura di per la larghezza della linea? Vedi, quello che voleva fare era una
specie di progressbar, ossia c'è un conto alla rovescia e volevo dividere la
lunghezza massima della linea per il numero dei secondi che devono passare
(sono riuscito a spiegarmi?). Però se il modulo che identifica la larghezza
della linea è tropp piccolo non funziona in quanto non si può utilizzare i
decimali (penso). E' possibile utilizzare una unità di misura diversa in
modo da far aumentare il valore della larghezza?
Il sistema lo avevo già utilizzato in Visual Basic, e li funzionava
perfettamente, infatti il valore della larghezza era molto maggiore, andava
sopra i 4000. Ho provato ad utilizzare un altro metodo di cui ho trovato un
esempio, ma non ci riesco neanche con quello, ossia utilizzando le classi
CPen e CBrush (cosa mi consigli a questo punto?).
Grazie e scusa ancora delle tante domande.
Luca

 Luca
ciao

> beh,in questo caso dovresti diegnare tutto "a mano",linea per linea.
Ed in questo caso cosa mi converrebbe utilizzare?
Luca

 Luca
ciao.

x e y sono la posizione ,w la lunghezza
Sprecare un handle cosě, suvvia... piuttosto, si intercetta il messaggio 
WM_PAINT e prima di disegnare tutto il resto si disegnano le linee (che 
tu internamente conservi come, magari, un array di istanze di una 
ipotetica classe CLine). VB fa cosě, i controlli che disegnano linee e 
forme sono puramente "logici", virtuali, non hanno un handle
-- 
Nato nel vizio, morto nel supplizio
Nato nel peccato, ad entrare sia invitato

 forme sono puramente "logici", virtuali, non hanno un handle
Ora ho fatto come mi hai dettotu ed ho utilizzato la classe CPen per fare le
linee, usando poi il device context ed utilizzando i metodi MoveTo e LineTo.
Perň ho sempre lo stesso problema, ossia che devo utilizzare come unitŕ di
misura il pixel. Io avrei bisogno di utilizzare come in VB il twip, che mi
permette di avere valori piů alti.
Grazie a tutti.
Luca

alti.
Riduci i valori con un'apposita scala. Ci sono i sistemi operativi che 
usano numeri non interi (cioè numeri reali, con la virgola) per le 
coordinate e le dimensioni su schermo, non Windows (che usa i pixel) 
purtroppo. Che è nato su un processore che i numeri in virgola mobile 
nemmeno li aveva (facci caso: nessuna funzione dell'API usa i float). 
Devi fare le conversioni "a mano": ti scegli un'opportuna scala (chessò, 
la dimensione massima tra larghezza e altezza della finestra) e 
ridimensioni in base a quella


nemmeno li aveva (facci caso: nessuna funzione dell'API usa i float). 
Interessante non lo avevo mai notato.
-- 
Marco Barisione (ICQ 84277092)

 numeri reali? Non ci sarebbero arrotondamenti "pericolosi"?
Probabilmente devi starci attento tu, sai che lui accetta solo un certo
numero di cifre decimali, dopo approssima, quindi devi fornirgliele già a
posto. Windows utilizza solo interi, infatti ho provato a dargli un numero
decimale e lui lo ha arrotondato all'unità, ed il compilatore mi ha
avvertito della conversione e della pericolosità di tale operazione con i
float. Quello che mi chiedo è però questo, come fa allora Visual Basic ad
utilizzare i twips? Ciò significa che è possibile una maggiore precisione
nel disegno.
Ciao a tutti.
Luca

nel disegno.
Si fa i calcoli da solo, alla fine VB usa le api di win e quindi anche
lui usa i pixel.


 lui usa i pixel.
Mi piacerebbe sapere che calcoli fa. Nessuno sa come poter esprimere in VC++
misure piů precise?
Grazie, ciao.
Luca Carlon

Interessante non lo avevo mai notato.
Vedi ad esempio la sprintf di windows, wsprintf. Gli mancano 
completamente i float


in VC++ misure più precise?
chiedi in iclvb, sono sicuro che qualcuno là dentro conosce l'algoritmo 
per la conversione twip-pixel. Ma come ti ho risposto in privato ti 
conviene adattare il sistema di misurazione di volta in volta, in base 
alle necessità


disegno
Non su Windows. A cui devi dare i float già troncati o comunque 
convertiti in interi. Quindi approssimati. Forse in futuro avremo un 
sistema operativo che accetterà 0.5 come larghezza di una linea, e te la 
rappresenterà con tanto di antialiasing per correggere l'inadeguatezza 
della risoluzione, ma non ancora


 alle necessità
Trovato. Non ce n'era bisogno, ho trovato quello che faceva per me dopo una
ricerca di qualche ora nelle msdn online di Misrosoft. Visto che forse a
qualcuno potrebbe servire vi posto il pezzettino di codice:
 CClientDC dc(this);
 // Questo è quello che cercavo, setta l'unità di misura per gli assi in
twips
 dc.SetMapMode(MM_TWIPS);
 // Creo una nuova penna
 CPen tPen(PS_SOLID, 100, RGB(240, 240, 240));
 //Uso la penna
 dc.SelectObject(&tPen);
 // Disegno
 dc.MoveTo(x1, y1);
 dc.LineTo(x2, y2);
E' tutto identico solo che la y positiva è verso l'alto, quindi per vedere
nella finestra la linea bisogno metterla negativa.
Grazie a tutti.
Luca Carlon