在CListCtrl对象中,想让它的子项和一个结构体关联起来,也就是:每个子项的某个属性保存一个结构体的数据,需要时,直接找到相应的子项,取出相应结构体中的数据。
     试过以下方法,但是总是中断,说“The variable 'pItem' is being used without being defined.”:   
     //CListCtrl m_list;
     for(int i = 0; i < m_list.GetItemCount(); i++) 
     {
         LVITEM *pItem;
     ->  pItem->mask = LVIF_PARAM;//中断于此处
   pItem->iItem = i;
pItem->iSubItem =NULL;
pItem->state = NULL;
pItem->stateMask =NULL;
pItem->pszText = NULL;
pItem->cchTextMax = NULL;
pItem->iImage = NULL;
pItem->lParam = (LPARAM)pSerInfoList;//pSerInfoList就是我想保存的结构体的地址
         m_list.SetItem(pItem);
     }
     上面错杂哪里呢?
     请问下大家,有比较好的方法吗?

解决方案 »

  1.   

    LVITEM *pItem
    pItem没有空间
    为什么要用指针呢?
    直接定义: LVITEM lvItem
      

  2.   

    for(int i = 0; i < m_list.GetItemCount(); i++) 
        { 
            LVITEM *pItem; 
        ->  pItem->mask = LVIF_PARAM;//中断于此处 
      pItem->iItem = i; 
    pItem->iSubItem =NULL; 
    pItem->state = NULL; 这里指针没有初始化赋值就使用,当然出错了
      

  3.   


    LVITEM lvItem;
    ZeroMemory(&lvItem, sizeof(LVITEM));

    lvItem.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;// | LVIF_TEXT;
    这里除了LVITEM还可以用LV_ITEM LV_ITEM lvItem;
    ZeroMemory(&lvItem, sizeof(LV_ITEM));

    lvItem.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;// | LVIF_TEXT;
      

  4.   

    你的指针没有分配空间。
    直接用对象吧LVITEM lvItem;
      

  5.   

    没必要将LVITEM定义指针类型的变量
    LVITEM lvItem;
    ...
    m_list.SetItem(&lvItem); 
      

  6.   

    现在没有用指针,
    LVITEM nItem;
    但是取结构体中的数据时,
    m_list.GetItem(&nItem);
    nItem.lParam,好像只能使用一次,
    第二次就错了,说什么写入错误。
    麻烦下,这是为什么啊?
      

  7.   

    这种情况下,最好用结构体!
    记得在使用前ZeroMemory()一下,因为有些成员参数你可能不会去设置,使用ZeroMemory初始化所有成员,避免访问非法。
      

  8.   

    保存结构体一般是用SetItemData,GetItemData
      

  9.   

    用SetItemData,GetItemData 函数,需要注意些什么啊?
    还是出错。
      

  10.   

    用SetItemData,GetItemData 就是结构体每次都要用new来产生,传地址