#include "SortList1.h"
CSortList* m_psortlist;
void CDragTree::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here
    // what item got selected?
    TV_ITEM SelectedItem;
    SelectedItem.hItem=pNMTreeView->itemNew.hItem;    
    GetItem(&SelectedItem);
    if(!SelectedItem.cChildren)    
    m_psortlist->DeleteAllItems();   //一到这里就说没有创建窗口,到底要怎么使用另一个类中的函数?
    HTREEITEM CurItem=GetSelectedItem();  
    CString temp=GetItemText(CurItem);        
    CString str=GetItemPath(CurItem,temp);    
    m_psortlist->InsertListItem(str);//一到这里就说没有创建窗口,到底要怎么使用另一个类中的函数?    *pResult = 0;
}

解决方案 »

  1.   

    你的这个问题好象出现在你没有给指针CSortList* m_psortlist赋值,这样会出现你说的那样错误了。
    我不知道你声明的m_psortlist这个全局变量在什么地方得到了初始化!!
    要不把他声明为类的成员变量!
      

  2.   

    sorry,可能是我没有说得太清楚,其实不用管其他得变量和函数,这个程序就错在我注释的地方,说没有创建窗口!m_psortlist确实是类成员变量。
    class CDragTree : public CTreeCtrl
    {
    protected:
         CSortList* m_pSortList;
    我知道没有初始化,就是不知该怎样写?
    这样写为什么不对?
    void CDragTree::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    m_pSortList=(CSortList*)GetDlgItem(IDC_LIST);
    if(m_pSortList==NULL)  return ;    //执行return
      

  3.   

    m_pSortList 必须先CREATE()创建窗口,然后在进行添加和删除操作。
    一般在CDRAGTREE类的ONCREATE()函数里面调用M_PSORTLIST的CREATE函数,
    还有,你这个指针赋值了没?
      

  4.   

    ;)
    没有内容,你deleteall啥啊?
      

  5.   

    对不起,我很菜,我还想问一下,在CDialogModalless类为什么没有创建窗口就能直接用了,如果我用create,它能保证是同一个窗口吗?还有,create的第二个参数我不知该怎样写?
      

  6.   

    第二参数,ID只要不和已有得ID(RESOURCE.H里面已定义得)冲突就可以了
      

  7.   

    从你代码看(m_pSortList=(CSortList*)GetDlgItem(IDC_LIST);)
    你的m_PSortList 应该是一个Listctrl并在对话框模板中,你不需要create,而只需将m_pSortList与ListCtrl进行绑定即可。