Newsgroup: it.comp.programmare.win32
Titolo: URGENTE: ToolTips

(SEMPRE GUAI !!)
Scusate se tempesto questo ng di domande magari anche stupide ma...
La vita dell'autodidatta non č cosě semplice !
Grazie per la vostra comprensione :-)
Veniamo al dunque...
Stavo cercando di aggiungere una finestra che gestisca le tooltips ad una
mia toolbar. La finestra viene creata correttamente e l'aggancio avviene
senza problemi.
La mia documentazione a questo punto mi dice di processare i messaggi
WM_NOTIFY con codice TTN_NEEDTEXT.
Secondo quello che ho letto l' LPARAM del messaggio contiene l'indirizzo di
una struttura TOOLTIPTEXT che a sua volta contiene un NMHDR.
Riesco ad agganciare il messaggio e ad identificare l'ID del controllo...
A questo punto, secondo sempre la mia documentazione, la struttura
TOOLTIPTEXT contiene anche i campi szText e lpszText: dovrei o copiare in
szText il testo oppure passare a lpszText l'indirizzo della stringa.
Facendo questo incorro in un acces violation appena la WinProc ritorna.
Peeeeeeeeeeercheeeeeeeeeee ?
(Non ho fatto errori, ho controllato sia col Debug sia con lo spy++ di
VC5.0)
Forse č sbagliata la mia documentazione ?
Oppure sono io che sbaglio da qualche parte ? (+ Probabile... :-) )

Oppure sono io che sbaglio da qualche parte ? (+ Probabile... :-) )
Anch'io ho avuto un problema simile, ma purtroppo non ricordo bene la
soluzione :-(
Innanzitutto una domanda: la violazione d'accesso si verifica immediatamente
quando modifichi i valori nella struttura o dopo che sei uscito dalla
winproc?
Il primo caso e' improbabile-impossibile (ma da win9x ci si puo' aspettare
questo ed altro), nel secondo caso:
    1) Se vuoi mettere in lpszText l'indirizzo di una stringa, fai
attenzione: questa deve essere disponibile anche dopo che sei uscito da
winproc; in altre parole, non deve essere una stringa allocata sullo stack
(ossia se all'interno della winproc hai:
char testo[20];
e poi fai
((LPTOOLTIPTEXT)lParam)->lpszText = testo;
allora l'errore si verifica perche' una volta uscito dalla procedura,
"testo" potrebbe anche non esistere piu'). Inoltre DEVI porre hinst = NULL.
    2) Se copi la stringa in szText, fa attenzione che non superi gli 80
caratteri. Inoltre, non so se sia necessario, ma fallo per sicurezza: hinst
= lpszText = NULL.
    3) Se metti hinst = valore_hInstance e lpszText = id_della_stringa (se
vuoi usando lpszText = MAKEINTRESOURCE(id_della_stringa), ma non e'
necessario). Questo metodo funziona sicuramente. Forse. ;-)
Saluti
    Mardy
--
6 maggio 1999- NETSTRIKE CONTRO TELECOM
Informati e iscriviti su 
www.notut.org
Per rispondere, togliere NVN dal mio indirizzo.
Per scrivere questo messaggio non e' stato abbattuto nessun albero!

Dunque, l'access violation arriva dopo, quando la WinProc ritorna ma "testo"
l'ho dichiarata static (static char Testo[]="Ciao!") quindi non dovrebbe
dare problemi.
Inoltre, se provo a copiare qualcosa nel buffer puntato da szText fa una
cosa ancora diversa: mostra la tooltip correttamente ma appena sopsto il
mouse dal bottone da un altro access violation. Se invece uso un resource da
l'access violation come se cambiassi l'indirizzo della stringa.
Non sarà perchè anzichè usare una cosa del tipo ((LPTOOLTIPTEXT)Lparam)
ho usato (reinterpret_cast<TOOLTIPTEXT>(Lparam)) ?
Forse è meglio che controlli, ma mi sembra strano...
Grazie cmq !!



