在对话框程序中对树控件执行了:
playinfo=(struct PLAYINFO *)malloc(sizeof(struct PLAYINFO));//playinfo:对话框的成员变量
playinfo->ID=ID;
...
m_chlist.SetItemData(hSel,(DWORD)playinfo);取值时操作:
struct PLAYINFO *info;
info=(struct PLAYINFO *)m_chlist.GetItemData(m_chlist.GetSelectItem());如果该对话框没有执行Showwindow(SW_HIDE),则上面的语句没有任何问题,可以取到树项所捆绑的指针及数值.
但是如果对话框执行了Showwindow(SW_HIDE)后,再Showwindow(SW_SHOW)显示出来,这时取到的树项捆绑的指针就为空.
这时将playinfo变量设置为全局变量,问题依旧.
Showwindow(SW_HIDE)操作会改变树控件吗?

解决方案 »

  1.   

    Showwindow(SW_HIDE)操作不会会改变树控件你是不是得再选择一下才对啊?Showwindow(SW_HIDE)会改变焦点,m_chlist.GetSelectItem()可能不对了。
      

  2.   

    SetItemData是在Showwindow(SW_HIDE)之前的吗?是同一个对话框实例吗?
      

  3.   

    可以肯定不是ShowWindow的问题,看看是不是其它地方有问题
      

  4.   

    SW_HIDE 只是切换隐藏窗口,不会释放窗口相关数据。
      

  5.   

    可能m_chlist.GetSelectItem()有问题;当前无选择项. 
      

  6.   

    这里的树是继承CTreeCtrl的自定义类,每次Showwindow(SW_HIDE)后,再Showwindow(SW_SHOW)显示出来,树结点捆绑的值就初始化了,我将捆绑的值改为一个整数,也是再取不到先前存储的值了。这里我的操作肯定是先选择树结点了!
    m_chlist.GetSelectItem()返回的是指向HTREEITEM的非空值.