有tree和list,我想在list中点一文件,得到相关信息。
                  char * szSrc = new char[MAX_PATH];
                  int nItem = m_wndList.GetNextSelectedItem(pos);   
LPLISTPARAM pliItem = (LPLISTPARAM) m_wndList.GetItemData(nItem); ZeroMemory(szSrc,MAX_PATH);  
SHGetPathFromIDList(pliItem->lpidl,szSrc);  
程序运行到LPLISTPARAM pliItem = (LPLISTPARAM) m_wndList.GetItemData(nItem);
就出错,跟踪了一下,pliItem 没有值。
LPLISTPARAM pliItem 我是在他的头文件中定义
typedef struct tagLISTPARAM
{
LPSHELLFOLDER lpsf;
LPITEMIDLIST  lpidl;
UINT     uType;
TCHAR    szName[128];
}LISTPARAM, *LPLISTPARAM;
是我定义的不对吗?为什么取不到我想要的数据?

解决方案 »

  1.   

    CListCtrl::GetItemDataDWORD GetItemData(int nItem) const返回值:与指定项相关的32位应用指定的值。参数: nItem 要获取数据的列表项的索引值。  说明:
    该成员函数能够通过nItem来获取与指定项相关的32位应用指定的值。这个值是LVITEM结构中的lParam成员,如同联机文档“平台SDK”中所描述的=================返回值是DWORD,为何楼主要用结构体指针?
      

  2.   

    给个简单的例子
    CString *pStr = new CString;
    *pStr = strFilePath;
    m_listctrl.SetItemData(0,(DWORD_PTR)pStr);取的时候
    CString *pCsSrcFilePath = (CString*)m_listctrl.GetItemData(0);
    还要记得delete掉,不然会有内存泄露
      

  3.   

    你要用GetItemData取文件路径,你总要先把文件路径存进去把?用SetItemData,你存的时候总知道把?我上面只是随便写的一个例子,反正只要存入个指针就可以,可以是一个CString的指针也可以是一个结构体的指针。
      

  4.   

    没有SetItemData,你Get肯定是空啊。这两个是相配对的。编译器没那么智能,你没Set他就知道你要什么!