Newsgroup: it.comp.programmare.win32
Titolo: Problema con stringa

Salve a tutti,
ho un problema che da qualche giorno non riusco a risolvere. Ho costruito
seguendo le istruzioni delle msdn una list-box ownerdrawn. Tutto funziona
perfettamente, ma ho notato una cosa quando passo la stringa da aggiungere
attraverso la SendMessage.
Ho dichiarato la stringa:
char stringa[100];
poi ho utilizzato la funzione sprintf dato che devo inserire anche delle
altre variabili nella stringa:
sprintf(stringa, "Stringa %d\0", intero);
e poi passo la stringa alla SendMessage:
SendMessage(hwnd, LB_ADDSTRING, NULL, (LPARAM) stringa);
ma in questo modo non funziona. La stringa aggiunta è piena di "I" e non è
il testo giusto. Il tutto funziona perfettamente se invece non uso la
sprintf, facendo tipo:
SendMessage(hwnd, LB_ADDSTRING, NULL, (LPARAM) "Stringa\0");
Secondo voi come mai? Qual'è la differenza?
Grazie per qualsiasi consiglio.
Luca

 ha scritto nel messaggio
news:kAM_a.3601$zN5....@news1.tin.it...

innanzitutto lo \0 in fondo non serve perche' viene aggiunto automaticamente
--
Pela

 innanzitutto lo \0 in fondo non serve perche' viene aggiunto
automaticamente
Lo so. Infatti inizialmente non lo avevo messo. Poi, notando che non
funzionava ho provato ad inserircelo. Ovviamente non cambia nulla.
Qualche altro suggeriemnto? Grazie mille cmq.
Luca

 ha scritto nel messaggio
news:kAM_a.3601$zN5....@news1.tin.it...


 instead of the string it would otherwise point to.
si, questo è esatto, ma come mai allora la stringa viene inserita
correttamente se viene passata direttamente a SendMessage?
Luca, facendo un debug controlla lo stato della stringa subito prima di
SendMessage; secondo me, sprintf o l'altra routine standard che hai usato
fanno qualche cavolata (o hai sbagliato qualcosa tu o devi usare un'altra
funzione).
ciao.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

se non si usa LBS_HASSTRINGS viene memorizzato nella listbox solo il
puntatore alla stringa
per funzionare il puntatore deve continuare ad essere valido anche dopo la
SendMessage
questo vale per la costante "Stringa" ma non per char stringa[100] che
immagino sia dichiarata locale alla funzione che chiama la SendMessage
"Al" <Non...@Dico.it> ha scritto nel messaggio
news:bhkp2q$kdu$1...@news.newsland.it...


 immagino sia dichiarata locale alla funzione che chiama la SendMessage
capito: il puntatore al segmento codice è sempre valido finché c'è il
processo in memoria, quello al segmento dati no (giusto?)


 processo in memoria, quello al segmento dati no (giusto?)
Scusate per il ritardo nella risposta. Ho provato ad aggiungere la proprietà
LBS_HASSTRING ma a quel punto il rpogramma crascha immediatamente alla
partenza (quando cioè invia il messaggio SendMessage).
Non vi avevo però postato questo che era importante:
TextOut(pdis->hDC, pdis->rcItem.left + 45, pdis->rcItem.top + tm.tmHeight +
2, (char*) pdis->itemData, strlen((char*) pdis->itemData));.
Inoltre ho notato che, senza LBS_HASSTRING, posso anche fare una cosa del
tipo:
char *string = "Stringa"
SendMessage(..., string...);
e la stirnga viene visualizzata correttamente nella listbox. Questo non però
se sostituisco il puntatore con:
char string[50] = "Prova prova prova\0";
come mai secondo voi?
Grazie mille per l'aiuto.
Luca

 ha scritto nel messaggio
news:AvH%a.92525$cl3.2...@news2.tin.it...


 come mai secondo voi?
devi usare:
static char string[50] = "Prova prova prova\0";
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.2. C, C++ and ASM developers
                               and beta testers are welcome!

 static char string[50] = "Prova prova prova\0";
Grazie mille. Cosě funziona. Adesso ho capito il problema. E se uno con la
sendmessage dovesse passare piů di una stringa? Io dovrei, ad esempio,
mettere due righe nello stesso elemento della listbox.
Grazie mille.
Luca