Newsgroup: it.comp.programmare.win32
Titolo: List box color item

Ho aggiunto un list box in un cdialog ........e vorrei cambiare il
colore
per ogni item
C'è qualcuno che puo darmi una mano ???
Sent via Deja.com 
http://www.deja.com/
Before you buy.

 wrote in message 8qevdp$vdq$1...@nnrp1.deja.com...


ciao
grazie per l'informazioen ma ,per quel poco che ho capito listctrl non
manda  NM_CUSTOMDRAW :(((((
che ne dici?


 che ne dici?
Non mi risulta che sia cosě.
Io l'ho utilizzato proprio per il listctrl (ho colorarato in maniera diversa
le righe pari e le righe dispari) e funziona correttamente.
Porlock.

 Non mi risulta che sia così.



non puoi magari scrivere un pezzo di codice per capire grazie ?? ::
oppure al mio indirizzo 
anto...@galactica.it
 te ne sarei veramente grato
                                      ciaoo

 wrote in message
L3fdJF0...@newsmst.mcis.galactica.it...

Sul sito del CodeGuru (
http://codeguru.earthweb.com/
) c'č un esempio cohe
utilizza le MFC.
Se andate nella sezione listview control e cercate l'articolo "Change
background color of individual rows" di Zafir Anjium, vi fa vedere un
esempio per colorare gli item del listctrl con il vecchio metodo (stile
ownerdraw); perň nei commenti č presente l'articolo "Simpler way to do this
(using new version of Comctl32.dll)" do Vidas (1999/06/21) che riporta
proprio la tecnica dell'NM_CUSTOMDRAW.
Ecco un estratto:
An easer way to to this is to use version 4.70+ of the Comctl32.dll ;-)
class CMyView : public CListView
...
1. Add to CMyView declaration:
  //AFX_MSG(CMyView)
  afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
  //AFX_MSG
2. Add to message map:
  BEGIN_MESSAGE_MAP(CMyView, CListView)
//AFX_MSG_MAP(CMyView)
 ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
//AFX_MSG_MAP
  END_MESSAGE_MAP()
3. Add function:
void CMyView::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
 LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
    switch(lplvcd->nmcd.dwDrawStage)
 {
 case CDDS_PREPAINT:
     // Request prepaint notifications for each item.
     *pResult = CDRF_NOTIFYITEMDRAW;
     break;
    case CDDS_ITEMPREPAINT: // Requested notification
     if(lplvcd->nmcd.dwItemSpec % 2)
     {
  lplvcd->clrText = RGB(255, 255, 255);
  lplvcd->clrTextBk = RGB(255,0,0);
     }
     *pResult = CDRF_DODEFAULT;
     break;
 }
}
And it's all you need !
Submitted By: Vidas (1999/06/21)
Qui č utilizzato per la classe CListView, dovrebbe funzionare allo stesso
modo per la classe CListCtrl.
Porlock.

 modo per la classe CListCtrl.
Ciao
Ho dato un'occhiata al sito ma ,purtroppo  ancora  non ho capito come fare
ti riporto quello che dice msdn (la stessa cosa su msdn online)
Currently, the following controls support custom draw functionality:
Header controls
List view controls
Rebar controls
Toolbar controls
Tooltip controls
Trackbar controls
Tree view controls
Come vedi nell'elenco non compare...con questo non voglio dire che non si
possa fare ma il metodo non è di facile comprensione .
(cmq grazie per l'info)


[CUT]
Mi dispiace veramente.
Ho sbagliato nel leggere ed ho continuato a sbagliare successivamente.
Ti ho mandato il sorgente del ListCtrl perché ho letto continuamente
ListCtrl, mentre in realta tu hai bisogno del ListBox.
Mi sono ostinato a dire che si poteva fare perché ero convintissimo che ti
serviva il ListCtrl e non il ListBox.
E ho dato la stessa risposta a Cobra.
Mi dispiace per l'errore e per il tempo che ti ho fatto perdere.
Porlock.

 Porlock.
ok :))

C'è qualcuno che puo darmi una mano ???
1) Prova un po' a rispondere al messaggio WM_CTLCOLORLISTBOX. Puoi
restituire un brush costruito ad arte (cioe' zebrato in pratica). Un
po' bizzarro e troppo difficile, lo ammetto.
2) Usare una listbox di tipo owner draw. Penso che esempi in MFC di
listbox owner-drawn ne e' pieno (guarda anche Codeguru.com).  
Bye.