CString cStr;
cStr.Format("%I64d", dw);
AfxMessageBox(cStr);
这是显示结果

解决方案 »

  1.   

    DWORD数据类型32位,你转成64位然后保存为32位
      

  2.   

    200101010200=0x2E 96F3 1B18
    超过DWORD
      

  3.   

    向TreeCtrl中添加数据,必须要用DWORD.
    CTreeCtrl::SetItemData
    BOOL SetItemData( HTREEITEM hItem, DWORD dwData );
      

  4.   

    DWORD dwData 可以是个指针
    所以:
    SetItemData(hItem, (DWORD)(&str);
      

  5.   

    hSubItem[0]=m_Tree1.InsertItem( strzjbt, hParent );//
    m_Tree1.SetItemData(hSubItem[0], (DWORD)(&str));试了下,结果还是不对
      

  6.   

    long a;
    CString h;
    a=m_Tree1.GetItemData(hTreeCurrent);
    h.Format(_T("%d"),a);  
    MessageBox(h);   
      

  7.   

    Set时,把str 的 地址 放进去了
    Get出来, 还是那个str 的地址.
    没必要再转换
    CString *h=(CString *)m_Tree1.GetItemData(hTreeCurrent);
      

  8.   

    CString *s=(CString *)m_Tree1.GetItemData(hTreeCurrent);
    CString h;
    h.Format("%ld",s); 
    MessageBox(h);怪了,显示的值还是和原来一样。
      

  9.   

    CString h;
    h.Format("%ld",s); 
    MessageBox(h);
    都不要的.CString *s=(CString *)m_Tree1.GetItemData(hTreeCurrent);
    MessageBox(*s);
      

  10.   

    "CString str="200101010200N1"//字符长度超过12位"
    必须是全局变量,不能在函数里(局部变量). 因为 .SetItemData(hSubItem[0], (DWORD)(&str));
    后还要用的, 不能 释放掉. 
      

  11.   

    怪我没说清楚,
    while( !m_pRs.IsEOF() )
    {
    CString str;
    int Rst[6];
    HTREEITEM hSubItem[6];//
    m_pRs.GetFieldValue(0,Rst[0]);
    m_pRs.GetFieldValue(1,Rst[1]);
    m_pRs.GetFieldValue(2,Rst[2]);
    m_pRs.GetFieldValue(3,Rst[3]);
    m_pRs.GetFieldValue(4,Rst[4]);
    m_pRs.GetFieldValue(7,Rst[5]);
    m_pRs.GetFieldValue(_T("ID"),strID);//
    m_pRs.GetFieldValue(_T("sjxh"),strsjxh);//
    m_pRs.GetFieldValue(_T("zjh"),strzjh);//
    m_pRs.GetFieldValue(_T("zjbt"),strzjbt);
    m_pRs.GetFieldValue(_T("debh"),strdebh);//
    m_pRs.GetFieldValue(_T("fbcch"),strfbcch);
    str=_T("");
    str=strzjh;
    hSubItem[1]=m_Tree1.InsertItem( strzjbt,hSubItem[0] )
    m_Tree1.SetItemData(hSubItem[1],(DWORD)(&strhh));
    }
    m_pRs.MoveNext();str实际上是从数据库里取出的一连串的数据:如
    CString str= 200101010200N1
    CString str= 200101010300N2
    CString str= 2001010104200N3
    CString str= 200101010500N4
    CString str= 200101010600N5
    CString str= 200101010700N6
    CString str= 200101010800N7
    CString str= 200101010900N8
    CString str= 200101020200N9
      

  12.   

    当单击Tree某个节点时,再将Str数据取出,调用其他数据
      

  13.   

    定义成全局变量后,str就固定成最后一个数了。
      

  14.   

    m_Tree1.SetItemData(hSubItem[1],(DWORD)(&strhh));
    1. strhh 必须是全局变量.(可以放类中: m_Strhh)
    2. 全局变量可以根据要求动态赋值
      

  15.   

    tree节点单击,好像取得的值都是数据库最后一个值
    CString *s=(CString *)m_Tree1.GetItemData(hTreeCurrent);
    MessageBox(*s);
      

  16.   

    这是因为每个item都要一个str,你只用了一个Str:因为每个item 需要一个 str ,所以定义一个模块变量:
    CStringArray m_arString;
    ..
    m_arString[]=
      

  17.   

    你看是不是可以这样,建立一个数据库或者一个数组,存放你所有的相关的数据,不管多长都能放是不,然后把序号和对应的item绑定,取数据的时候,就取序列号,然后从数据库里面去取对应的数据。同是新手,错误之处请见谅。
      

  18.   

    UpdateData(TRUE);
    m_arString.SetSize(m_pRs.GetRecordCount());
    m_arString.Add(str);
    hSubItem[0]=m_Tree1.InsertItem( strzjbt, hParent );
    m_Tree1.SetItemData(hSubItem[0], (DWORD)(&m_arString));
    用数组方法数据都存进去了,取出不会取。
    CString *s=(CString *)m_Tree1.GetItemData(hTreeCurrent);是取出所有的值
      

  19.   

    "m_Tree1.SetItemData(hSubItem[0], (DWORD)(&m_arString));"m_Tree1.SetItemData(hSubItem[0], (DWORD)(&m_arString[ID]));
    你把整个array都放每个item了.应该是每个item放一个str (即array中的第ID项)这里有个问题是hItem 与ID 转换问题,也就是每个hItem 要对应一个ID,以便
    从hItem可以得到ID ,进而:m_arString[ID]
      

  20.   

    所以可能还要用:CPtrArray
    把所有 hItem 存起来.
      

  21.   


    我这个数据都是从数据库里调出,编号长度超过了12位,我要用这个编号去调别的表里的对应数据。取序号就调不了。

    他说的方法是正确的,用map之类的。
    std::map<DWORD, std::string>
    你存储进map使用ListView的Count值作为DWORD,到时候再取序号里的值就可以了
      

  22.   

    谢谢老大,您新年愉快,搞定。
    增加:
    int i;
    i=0;
    while( !m_pRs.IsEOF() )
    {
    m_arString.SetAt(i,str);
    hSubItem[0]=m_Tree1.InsertItem( strzjbt, hParent );//
    m_Tree1.SetItemData(hSubItem[0], (DWORD)(&m_arString[i]));i+=1;
    m_pRs.MoveNext();
    }
    m_pRs.Close();
    取出:
    CString *h=(CString *)m_Tree1.GetItemData(hTreeCurrent);
    请问:m_arString需要释放?在何处释放?
      

  23.   

    m_arString 是类的成员, 不是new出来的指针.
    所以CStringArray析构购函数会自己释放,你不必释放
      

  24.   


    那就取前  len-2 个字符咯就可以字符串200101010200N1得到字符串200101010200
      

  25.   

    200101010200 已经超出32位了,请使用 ULONGLONG 而非 DWORD 来保存。