PDA

Visualizza la versione completa : [C] Utilizzo di CListCtrl


and87
05-12-2008, 09:29
Ciao ragazzi sto facendo un'applicazione MFC dove utilizzo la classe in oggetto. Allora ho 2 problemi. Il primo come inserire un immagine(presente sul mio hd,per ora va bene anche sempre la stessa) ad ogni item e ad ogni item assegnare un tooltip.
Allora vi posto il codice da me utilizzato. Ditemi se ci sono errori e dove.
Io quello che vedo che l'immagine non si vede e il tooltip viene visto sempre l'ultimo ad ogni item,ma spostando di poco il mouse si vedono random anche gli altri.


imagelist = new CImageList();

HIMAGELIST hImageList = ::ImageList_LoadImage(AfxGetInstanceHandle(), _T("C:\\Foto.bmp"),64, 0, RGB(255,0,255), IMAGE_BITMAP, LR_LOADFROMFILE);
if(hImageList != NULL)
{
imagelist->Attach(hImageList);
}
m_list.SetImageList(imagelist, LVSIL_SMALL);
for(int i = 0; i<5;i++)
{
m_tooltip= new CToolTipCtrl();
m_tooltip->Create(this);
//***Create Item***//
LV_ITEM lvi;
lvi.mask = LVIF_IMAGE | LVIF_TEXT;
lvi.iItem = i;
lvi.iSubItem = 0;
lvi.pszText = "PIPPO";
lvi.iImage = 0;
m_list.InsertItem(&lvi);
/////////////////////////////

//***Create ToolTip to Item***//
TOOLINFO ti;
memset(&ti, 0, sizeof(TOOLINFO));
ti.cbSize = sizeof(TOOLINFO);
ti.lpszText = "PIPPO" + i;
ti.hinst = AfxGetInstanceHandle();
ti.hwnd = m_list.GetSafeHwnd();
ti.uFlags = TTF_SUBCLASS | TTF_IDISHWND | TTF_TRANSPARENT ;
ti.uId = (UINT) m_list.m_hWnd;
m_tooltip->SendMessage(TTM_ADDTOOL, 0, (LPARAM) &ti);
m_tooltip->SetDelayTime(2000,200);
m_tooltip->SetTipBkColor(RGB(0xFF,0,0));
m_tooltip->SetTipTextColor(RGB(0xFF,0xFF,0xFF));
}


p.s. m_list di tipo CListCtrl*

Grazie

MacApp
05-12-2008, 10:03
"LV_ITEM lvi" e "TOOLINFO ti", nascono e muoiono ad ogni iterazione: ma il loro indirizzo viene passato ad oggetti che "vivono" al di fuori dal ciclo "for". Leggansi: comportamento indefinito.
;-)

and87
05-12-2008, 10:19
Originariamente inviato da MacApp
"LV_ITEM lvi" e "TOOLINFO ti", nascono e muoiono ad ogni iterazione: ma il loro indirizzo viene passato ad oggetti che "vivono" al di fuori dal ciclo "for". Leggansi: comportamento indefinito.
;-)

Quindi cosa devo fare?
Come posso procedere?
Grazie

oregon
05-12-2008, 13:40
Devi usare dei puntatori agli oggetti e crearli con la new.

and87
05-12-2008, 14:37
Originariamente inviato da oregon
Devi usare dei puntatori agli oggetti e crearli con la new.
Quindi ad ogni ciclo ne alloco uno?
E quando li distuggo?

oregon
05-12-2008, 15:07
Li distruggi quando non ti servono piu' ... non posso dirti quando questo succedera' ...

and87
05-12-2008, 18:03
Originariamente inviato da oregon
Li distruggi quando non ti servono piu' ... non posso dirti quando questo succedera' ...
Provato ma niente..
Uffa xke?
:confused:

and87
09-12-2008, 10:20
Originariamente inviato da oregon
Devi usare dei puntatori agli oggetti e crearli con la new.
Ti posto il nuovo codice all'interno del ciclo for.


m_tooltip= new CToolTipCtrl();
m_tooltip->Create(this);

LV_ITEM* lvi = new LV_ITEM;
memset(lvi, 0, sizeof(LV_ITEM));
lvi->mask = LVIF_IMAGE | LVIF_TEXT;
lvi->iItem = i;
lvi->iSubItem = 0;
lvi->pszText = "PIPPO";
lvi->iImage = 0;
m_list.InsertItem(lvi);

TOOLINFO* ti = new TOOLINFO;

memset(ti, 0, sizeof(TOOLINFO));
ti->cbSize = sizeof(TOOLINFO);
ti->lpszText = "PIPPO" + i;
ti->hinst = AfxGetInstanceHandle();
ti->hwnd = m_list.GetSafeHwnd();
ti->uFlags = TTF_SUBCLASS | TTF_IDISHWND | TTF_TRANSPARENT ;
ti->uId = (UINT) m_list.m_hWnd;
m_tooltip->SendMessage(TTM_ADDTOOL, 0, (LPARAM) ti);
m_tooltip->SetDelayTime(2000,200);
m_tooltip->SetTipBkColor(RGB(0xFF,0,0));
m_tooltip->SetTipTextColor(RGB(0xFF,0xFF,0xFF));

Niente da fare. Come se associasse i tool tip al controllo CListCtrl e non hai singoli Item.
Qualcuno mi pu aiutare?
Grazie

oregon
09-12-2008, 10:23
Non ho capito cosa succede ... quale problema hai ... tu lo saprai bene ma se non lo spieghi dettagliatamente, non so neanche di cosa stiamo parlando ...

and87
09-12-2008, 10:36
Originariamente inviato da oregon
Non ho capito cosa succede ... quale problema hai ... tu lo saprai bene ma se non lo spieghi dettagliatamente, non so neanche di cosa stiamo parlando ...

L'item non ha un tooltip proprio,o meglio. Su tutti gli item viene associato l'ultimo,ma spostando di poco il mouse si vedono random anche gli altri associati...
Ad esempio:

pippo1 pippo2 pippo3 pippo4 pippo5

Se metto il mouse su qls pippo lui mi fa vedere il tooltip associato a pippo5, ma se abbasso di poco il mouse mi fa vedere "randomicamente" gli altri.

Loading