Bonjour,

J'aimerais modifier la couleur de certains items d'une list view. Pour cela, j'ai trouvé plusieurs articles le faisant grâce au message NM_CUSTOMDRAW.

J'ai donc quelque chose comme ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
	case WM_NOTIFY:
		if(lpnmhdr->hwndFrom = hListView) {
			LPNMLISTVIEW pnm = (LPNMLISTVIEW)lParam;
			if(pnm->hdr.code == NM_CUSTOMDRAW)
			{
				SetWindowLong(hWnd, DWL_MSGRESULT, (LONG)CustomDrawProc(lParam));
				return TRUE;
			}
et une méthode CustomDrawProc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
LRESULT CALLBACK CustomDrawProc(LPARAM lParam)
{
	LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;
	
	switch(lplvcd->nmcd.dwDrawStage) 
	{
	case CDDS_PREPAINT : //Before the paint cycle begins
		//request notifications for individual listview items
		return CDRF_NOTIFYITEMDRAW;

	case CDDS_ITEMPREPAINT: //Before an item is drawn
		if (((int)lplvcd->nmcd.dwItemSpec%2)==0)
		{
			//customize item appearance
			lplvcd->clrText   = RGB(255,0,0);
			lplvcd->clrTextBk = RGB(200,200,200);
			return CDRF_NEWFONT;
		}
		else{
			lplvcd->clrText   = RGB(0,0,255);
			lplvcd->clrTextBk = RGB(255,255,255);

			return CDRF_NEWFONT;
		}
		break;
	}
return CDRF_DO_DEFAULT;
}
Mon programme ne reçois jamais le message CDDS_ITEMPREPAINT !!! C'est un projet C++ win32 (sans MFC).

Merci pour votre aide.