我做了个基于MFC的系统,用到了树型控件和列表,现在我在树型控中已经能够实现点击左边的树中任一节点,其中数据会显示在右边的静态文本中,而我现在想要的功能是点击左边树中节点,在右边的列表控件(listctrl)会显示对应的数据.
注:其中树型控件和列表中的数据都放在数据库中,分别对应两张表:TreeItem,Device.资料和图片.网上资料我看了很多,但还是不会,
http://www.vckbase.com/document/finddoc.asp?keyword=treectrl上的例子没一个与我现在的例子相符,

http://topic.csdn.net/u/20070509/21/c4423785-3ce0-4507-bc0e-dc5c88ee6123.html中与我最相符,但其中4楼的话我不太明白.请大家把这部分的相应代码给我贴出来吧,本人已经被这个问题困了几天了,烦死了.....

解决方案 »

  1.   

    我可以用树型控件将数据库中的信息作为节点显示出来,我也可以用列表控件显示数据库中的数据,我知道响应消息应该是用
    OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult) ,但我还是不能把它们连起来...
      

  2.   

    在OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult)函数中你不会把列表数据装上就得了?怎么得到列表控件指针或者变量不会还是其他问题?
      

  3.   


    可能给你说中了,"在OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult)函数中你不会把列表数据装上就得了?"
    怎么做呢...
      

  4.   


    既然会用treectrl和listctrl,也会操作数据库
    我不觉得还有什么难点阿
    @_@
      

  5.   

    结贴了,我还是把我自己成功运行的代码贴出来,以帮助在VC路上不停前进的后来者.
    以下是我把树型控件和列表控件相结合,实现了点击树型节点中任一处,在列表控件上显示对应的信息的代码:
    void CProp1::OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // MessageBox(cstr);  测试cstr的内容
     //cstr是全局变量,用于获取用户点击树节点中的内容
    CString sSQL;
    rst=cnn->Execute(L"Device",NULL,adCmdTable);// sSQL.Format("select * from Device where 课室='%s'",cstr);
    /*//---------此处执行不了,不知为何------
    if(cstr=="主教学楼"&&"主楼二楼"&&"主楼三楼"&&"主楼四楼"&&"主楼五楼"&&"主楼六楼"&&"主楼七楼"&&"主楼八楼"&&"主楼九楼")
    {
     sSQL.Format("select * from Device where Name='%s'","Name");
    }*/
    /*
    这是我树型架构,因为我不想在节点上显示信息,所以将它们都实现了点击显示相同的内容
    */
    if(cstr=="主教学楼")
    sSQL.Format("select * from Device where 课室='%s'","Name");
    else if(cstr=="主楼二楼")
    sSQL.Format("select * from Device where 课室='%s'","Name");
    else if(cstr=="主楼三楼")
    sSQL.Format("select * from Device where 课室='%s'","Name");
    else if(cstr=="主楼四楼")
    sSQL.Format("select * from Device where 课室='%s'","Name");
    else if(cstr=="主楼五楼")
    sSQL.Format("select * from Device where 课室='%s'","Name");
    else if(cstr=="主楼六楼")
    sSQL.Format("select * from Device where 课室='%s'","Name");
    else if(cstr=="主楼七楼")
    sSQL.Format("select * from Device where 课室='%s'","Name");
    else if(cstr=="主楼八楼")
    sSQL.Format("select * from Device where 课室='%s'","Name");
    else if(cstr=="主楼九楼")
    sSQL.Format("select * from Device where 课室='%s'","Name"); else{ sSQL.Format("select * from Device where 课室='%s'",cstr);
    }
     try{
     rst=cnn->Execute((_bstr_t)sSQL,NULL,adCmdText);
     }
     catch(...)
     {
     theApp.ADOError(rst);
     }
    if(theApp.GetRecordCount(rst)>0)
    {    
       m_Grid.SetRecordset(rst);
    }
    *pResult = 0;
    }
    在这里要表明:我这个代码可能比较冗余,后来者可以参考,自己则适当的修改最后,在这里提问虽然没人给我一个直接的答案,但还要谢谢你们的参与.分不给你们就给系统收了,还是给你们吧..