如上图所示,点击左边的树型结构,右边区域就显示不同的内容,不同的内容包括有不同的控件,不同的文字,不同功能等。可能出现的控件有EditBox, CheckBox, Button, RadioBox, ListCtrl, ComboBox等等。由于左边树形列表内容很多,用TabControl把这些控件页都描出来比较麻烦,而且更重要的是这些东西经常需要修改的,树形列表有时候会增加些项目,有时候会减少些项目,所以不能使用tab control,请大家务必清楚这点。当然了,设计到界面就必须要有对应的数据结构,这些也是我想要的,如果诸位有什么idea,可以给我share一下。

解决方案 »

  1.   

    原来的程序是用一些描述语句来描述这个要显示的页面的,把需要显示的东西show出来,不需要显示的hide起来,show出来的东西适当调整下位置,就这样实现。内部数据结构有点复杂,涉及到一些分隔符什么的,any good idea? guys.
      

  2.   

    右边用个CFormView的结构
    类似是个对话框。每一次切换相当于切换了个对话框。
      

  3.   

    用WS_CHILD风格的CDialog建立不同页面响应不同点击消息之后就显示对应的页面即可,其实和TAB页面实现方法类似
      

  4.   

    只能用分页的方式,但可以不用TabCtrl,设计好子对话框,根据TreeCtrl中的选择,用ShowWindow来控制子对话框,把需要的显示出来,其它的都隐藏就可以了。
      

  5.   

    树形列表有时候会增加些项目,有时候会减少些项目,所以不能使用tab control,请大家务必清楚这点。 
    ================
    哦,天,动态的!!!!
    我看过一个类似的例子,这里和楼主分享下,例子上的树不是动态的,右边用的是CDialog
    切换树时,show对应的CDialog。
    不过我想也可以使用MFC的DECLARE_SERIAL和IMPLEMENT_SERIAL机制
    通过一个CDialog的名(CStrnig)就可以创建该CDialog
      

  6.   

    建立一个map:map<string,CDialog*> m_DlgList;
    通过字符串索引窗体指针。
    字符串就是TreeList中被选中的项的字符串。动态增加窗体的话,insert到map里面去就可以了。
    这样的程序,很难吗?
      

  7.   

    创建一个树状的结构,然后,树状的结构中的节点指针中包含一个CDialog的指针成员m_pDlg,在树状控件中,设置节点的itemdata,CTreeCtrl::SetItemData();将树状控件中的节点同树状的结构中节点一一对应,然后,双击树状控件中的节点,可以找到该节点的data, CTreeCtrl::GetItemData(),得到树状的结构节点指针,然后,显示该指针下的成员CDialog指针m_pDlg,其他节点的CDialog指针隐藏掉。剩下的事情就是怎么创建编辑CDialog的指针成员m_pDlg了。
      

  8.   

    各位的意思大概就是创建许多Dialog,适当时候再一一把它们show出来或者hide起来,可我如果左边的tree的内容确实很多,那要创建的dialog就是很多的,维护起来不容易,这些东西还可能经常要改,一个Dialog对应一个class的话那要多少class啊?有没有高效些的方法?楼上有位朋友说用xml,能否具体些?
      

  9.   

    http://www.codeproject.com/KB/tabs/treepropsheet.aspx
    这个应该可以满足你的要求。
      

  10.   

    我是这样实现的:1、在界面上放置足够多的可能出现的各类控件,并联系变量,初始化时全部隐藏;
    2、TreeCtrl中的每一个item联系一个结构或类,用于保存改item要使用的控件指针、位置、大小、显示内容等等信息;
    3、当item被选中时:
        a)、首先隐藏所有控件;
        b)、根据控件联系的结构或类储存的信息,初始化控件及要显示的内容(MoveWindow、SetWindowText等等);
        c)、显示所有相连的控件(ShowWindow)。
      

  11.   

    用XML动态创建控件?,创建也花系统时间的。效率呢?怎么保证
      

  12.   

    每个子对话框只要建立一个对话框资源就可以,不一定要定义对话框类,可以用CDialog类,或者从CDialog派生一个类,所有子对话框都用这个类,或者若干对话框用同一个类。
      

  13.   

    Programming Microsoft Visual C++ 6.0 技术内幕第五版(修订版)第97页
      

  14.   

    http://www.codeproject.com/KB/dialog/WndFreePool.aspx
      

  15.   

    动态生成/显示这个方法,数据结构如何来组织,就是说如何从控件获取数据,或者set数据到控件?
      

  16.   

    to: breakindThat's cool, thank you, and I am researching it now.