Newsgroup: it.comp.programmare.win32
Titolo: CListCtrl e piccola freccia di ordinamento nelle colonne

Non credo che la domanda sia ben chiara dal Subject, cmq il problema è
che vorrei visualizzare (solo visualizzare,l'ordinamento è stato già
fatto) nelle colonne della mia list (report) quella piccola
freccettina che appare in molti programmi che sta ad indicare, che la
lista è ordinata rispetto a quella colanna in modo crescente (freccia
in su) decrescente (freccia in giù)...
...ho provato molto spartanamente a inserirla come testo nel membro
pszText di una struttura LVCOLUMN...ma il rusultato è un "simbolo
strano", deduco quindi che il font utilizzato dalla mia dlg, non
supporta la freccia (bohh forse deduco male?!)
Grazie...e grazie !!


Non ho mai provato, ma non dovrebbe essere complicato, dalla versione 4.70
della libreria comctl32.dll e' possibile aggiungere un simbolo grafico. Per
informazioni piu' dettagliate guarda le macro Header_SetImageList (messaggio
HDM_SETIMAGELIST) e Header_SetItem (messaggio HDM_SETITEM).
Luca

 Luca
Io programmo in MFC e ho controllato su MSDN ma non sono riuscito a capire...
Potresti indicarmi meglio COME usare qualle macro per il mio scopo
Graziiie


Non uso le MFC, ma suppongo che sia come con le API, semmai piu' semplice.
Premetto che non l'ho mai fatto e non ho tempo di provare, comunque farei
cosi: prepari una striscia con 3 bitmap uguali affiancate (non so, 3
quadrati 8 x 8 pixel, uno senza niente, uno con la freccia su e uno con la
freccia giu', usando un colore uniforme per lo sfondo, io uso il fuxia di
solito) e la aggiungi alle risorse. Con la ImageList_LoadImage crei una
image list. Guarda la documentazione (in particolare il flag
LR_LOADMAP3DCOLORS per creare l'effetto 3D. A questo punto con la
Header_SetImageList la associ all'header della listvire (lo ottieni con
ListView_GetHeader) e con la Header_SetItem associ una delle 3 immagini ai
vari segmenti dell'header. Spero di essere stato piu' chiaro. Con le MFC
dovrai magari cambiare qualcosa, ma la procedura dovrebbe rimanere
grossomodo la stessa.
Luca

 Graziiie
Ho scritto un esempietto con le API, funziona. Se non riesci fammelo sapere
che te lo mando via mail (sono una manciata di righe per aggiungere la
freccetta).
Luca

Sei stato estremamente gentile... e per questo: GRAZIE GRAZIE GRAZIE!!
E credo di aver anche capito una traduzione del tutto in MFC:
****************************CODE***********************
	//INIZZIALIZZA LA LISTA DELLE IMMAGINI
	HIMAGELIST hList = ImageList_Create(8/*WIDTH*/,8/*HIGH*/,ILC_COLOR
|ILC_MASK,8/*# IMMAGINI*/,1);
	m_cImageList.Attach(hList);   //m_cImageList (CImageList)
	//ASSOCIA L'IMMAGINE ALLA LISTA
	CBitmap cBmp;
	cBmp.LoadBitmap(IDB_RISORSABMP);
	m_cImageList.Add(&cBmp,RGB(255,0, 255));
	cBmp.DeleteObject();
	//ASSOCIA LA LISTA DI IMMAGINI AL CONTROLLO LIST
	m_list.SetImageList(&m_cImageList, LVSIL_SMALL);  //m_list
(CImageListCtrl)
************************************END**********************
OK...l'ho messo magari trovi qualcosa di sbagliato anche se non
programmi in MFC...
cmq ho incontrato un problema (1 altro problema!), sicuramente ingenuo
e stupido, ma approfittò della tua disponibilità:
Praticamente ho già associato alla mia ListView un ImageList (che mi
serviva per le righe della lista), che ha però caratteristiche diverse
(32x32 x ogni bmp,...)
Ora come posso associare un altra ImageList alla mia ListView, o
ampliare la stessa già associata, ma con 3 bmp 8x8!?!?
E poi quando vado ha impostare l'immagine nella colonna quale sarà
l'"index" dell'immagine (in MFC è iImage di una struct LVCOLUMN)??
Non so forse non sono stato molto chiaro...e cmq ti ringrazio per il
tempo usato per risponderemi, cercare e provare tutte le informazioni
che mi hai dato...TNX


C'e' un errore logico nel codice che poi si riflette nella tua seconda
domanda. Il controllo ListView quando usato in modalita' report e' composto
da 2 elementi: il controllo ListView vero e proprio e un altro controllo, un
SysHeader posto in alto con i nomi delle colonne. L'ImageList che contiene
le freccette che indicano l'ordinamento non vanno associate alla ListView,
che come hai detto tu potrebbe avere gia' una ImageList associata per i
disegnini nelle righe, ma al controllo SysHeader in alto (e' li che verranno
disegnate le freccette). Per ottenere l'handle del SysHeader c'e'
un'apposita macro (puoi inviare anche il messaggio direttamente) la
ListView_GetHeader. Quindi la tua:
m_list.SetImageList(&m_cImageList, LVSIL_SMALL);
dovrebbe diventare (invento....)
cImageListHeader = m_cImageList.GetHeader();
m_list.SetImageList(&cImageListHeader, LVSIL_SMALL);
Luca

Grazie... Sono FINALMENTE riuscito a far funzionare tutto a dovere...
sei stato provvidenziale.
Grazie Ancora!