Newsgroup: it.comp.programmare.win32
Titolo: ActiveX in VC++ e strani comportamenti...

Salve a tutti,
provo a ripostare in maniera piu' corretta il mio messaggio.
Scusate se ho postato su piu' gruppi il vecchio msg, questo e' solo qui
su it.comp.programmare.win32: credo, tutto sommato, che sia il gruppo
piu' 
azzeccato per il problema (grazie, Alex!).
Non so se il discorso e' un po' OT, ho cercato sui vecchi post
(sui gruppi it.comp.lang.visual-basic, it.comp.lang.c++,
it.comp.programmare.win32) una risposta alla mia domanda ma
non ho trovato proprio niente. 
Sto creando un controllo ActiveX con Visual C++ 5.0, da utilizzarsi con
Visual Basic 5.0 . 
Nel controllo ho attivato l'evento MouseMove. 
Dal Visual Basic riesco pero' solamente ad ottenere le coordinate in
Twips, e non in Pixel come a me servirebbero. 
E' da notare che l'evento MouseMove fornisce i pixel, tanto 
che se uso il mio controllo in VC++ la MouseMove mi fornisce 
la posizione in pixel. 
Ho fatto allora qualche prova creando in due modi un custom event
MyMouseMove (lanciato con la OnMouseMove del mio
controllo) e questo e' il risultato: 
1) MyMouseMove(OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y) 
   si comporta come la MouseMove, fornendo le coordinate in 
   Twips; 
2) MyMouseMove(long x, long y) 
   fornisce le coordinate in pixel come da me voluto. 
Suppongo che il Visual Basic "converta" i valori in pixel, forniti dalla
funzione originale MouseMove, 
in twips, perche' questa e' per lui l'unita' di misura 
di default. 
Come faccio a fare in modo che il Visual Basic non effettui questa
conversione e mi lasci i valori in pixel? 
Ho provato a costruire una proprieta' ScaleMode per il mio 
controllo ActiveX (in analogia ai controlli VB), ma non ho 
ottenuto alcun risultato (il VB se ne infischia). 
Inoltre c'e' una cosa molto strana: la MouseMove del controllo in VC++
viene cosi' definita dal ClassWizard:
void FireMouseMove(short Button, short Shift, OLE_XPOS_PIXELS x,
OLE_YPOS_PIXELS y)
	{FireEvent(DISPID_MOUSEMOVE,EVENT_PARAM(VTS_I2  VTS_I2 
VTS_XPOS_PIXELS  VTS_YPOS_PIXELS), Button, Shift, x, y);}
e quindi accetta come parametri due short e due parametri
OLE_?POS_PIXELS che sono in realta' due "long".
Il Visual Basic, dal canto suo, definisce cosi' al funzione associata
all'evento MouseMove del mio controllo (o di qualsiasi altro controllo):
Private Sub MyControl_MouseMove(Button As Integer, Shift As Integer, x
As Single, y As Single)
I parametri di posizione x e y li fornisce come "single", cioe' in
virgola mobile!!!
Tutto cio' mi sorprende. Chi e perche' fa questa conversione?
Qualcuno sa darmi una dritta o una indicazione su dove andare 
a cercare una risposta alle mie domande? 
Grazie. 
Lorenzo 
ste...@iroe.fi.cnr.it

 a cercare una risposta alle mie domande?
Sta tutto nel settaggio di ScaleMode.  C'e` qualche piccolo bug
di eredita` per questa proprieta` in certi contesti, vedi nel
Knowledge Base di VB nell'MSDN, ma non mi pare che siano
quelli che ti stanno urtando.
Forse il gruppo di visual basic e` piu` appropriato, perche`
ScaleMode e` appunto strettamente roba del VB stesso.
Alex

 ScaleMode e` appunto strettamente roba del VB stesso.
OK che ScaleMode sia strettamente roba del VB, ma il gruppo del VB
non esce dall'ambito del VB, e fare un ActiveX in VC++ non lo
considerano proprio...
Ciao a tutti e grazie ad Alex per l'aiuto.
Lorenzo
ste...@iroe.fi.cnr.it