student *stu1 = (student *) m_listctrl.GetItemDataPtr(m_listctrl.GetSel(IDC_LIST1));
MessageBox((*stu1).sex);//不行程序出错
MessageBox(stu1->sex);//和上面一样的错  编译都通过"""""""
student是个结构体~~这样的强制转换行吗?
怎么我好像用MessageBox输出年龄程序会出错呢?
编译通过
补充:这段程序写在LISTBOX的SELCHANGE消息映射当中
"""""""
自己调试了下
我在MESSAGEBOX前下断点
到这里的时候发现stu1的指针没有得到正常的返回值
stu1的值是0Xffffffff
自然age就是找不到的值
那我怎么得到LISTBOX的选中项目绑定数据的指针?不是getsel()得到索引号ID然后GETITEMDATEPTR得到绑定数据吗?
GETITEMDATEPTR返回的是空类型的指针

解决方案 »

  1.   

    student *stu1 = (student *) m_listctrl.GetItemDataPtr(m_listctrl.GetSel(IDC_LIST1)); 
    ==================================
    这句能不能成功关键是看你相应的节点上是不是绑定了数据,而且绑定的只能是32位的值。
      

  2.   

    GetItemData()好像是绑定32位的值~~
    GetItemDataPtr()好像是绑定任意结构的指针啊?我这段代码是在SELCHANGE消息映射中的~~我选中这个项目~~当然他已经绑定了数据了~~不然我也选不到啊~~问题不在结构体中的成员是否赋值~~而是这个结构体他得到的返回地址是0Xffffffff根本没有得到结构体的地址啊?
      

  3.   

    刚才看了一下MSDN,m_listctrl.GetSel(IDC_LIST1),这句的参数不对,IDC_LIST1应该是控件的ID吧,而这个参数应是index
      

  4.   

    将这一句改成这样试试:
    student *stu1 = (student *) m_listctrl.GetItemDataPtr(m_listctrl.GetCurSel( ));