由于是纯SDK编程,不能用MFC或WTL中已经存在的类。
想自己写一个CTreeCtrl,要求:① 动态添加内容并控制(想用指针数组实现,可否?);
② 支持插件:从pluginfo里得到Dialog的标题,再插入Tree里,并显示;
③ 控制当前显示的应该是哪个Dialog(传入序号,再以序号索引指针数组,得到Item标题,再比较,以决定显示哪个Dialog,并把其他Dialog都隐藏)。上述思路是否可行?如不行,正确思路?有没有SDK的类似源码?没学过MFC,看不懂MFC代码,请有过TreeControl开发经验的朋友指点一二,多谢!

解决方案 »

  1.   

    MFC的CTreeCtrl是对window common control中treeview control的封装。
    自已写一个类,封装treeview control就可以了。即使是edit控件,实现起来都不太容易,更何况是treeview。只有当你确定treeview不能满足你的特殊需求时,才会考虑自己实现。
      

  2.   

    ② 支持插件:从pluginfo里得到Dialog的标题,再插入Tree里,并显示;
    ③ 控制当前显示的应该是哪个Dialog(传入序号,再以序号索引指针数组,得到Item标题,再比较,以决定显示哪个Dialog,并把其他Dialog都隐藏)。答1:可以啊,数据结构是你自己定的,比如可以如下:typedef struct tagTREENODE //代表一个树节点
    {
        HICON hIcon, //节点的图标
        TCHAR szCaption[20], //节点的标题
        TCHAR szTips[20], //节点的提示内容
        vector<tagTREENODE*> pChilds //子节点
    }TREENODE, LPTREENODE;typedef vector<TREENODE> MYTREEDATAS
    然后你的树的内容就可以用这样一个变量来存放
    MYTREEDATAS ctlTree;答2:可以,你自己定义该插件的结构,按你的情况,需要定义好dialog标题与树的对应结构,例如该文件的内容是(这里我用xml来做为该文件的格式):
    <?xml....>
    <treeinfo>
        <trnode caption="XX进销存系统">
            <trnode caption="销售统计" DialogId="15698"/>
            <trnode caption="进货统计" DialogId="12634"/>
            <trnode caption="报表输出" DialogId="13314"/>
            <trnode caption="系统设置" DialogId="12654">
                <trnode caption="管理员设置" DialogId="12734"/>
                <trnode caption="在线升级" DialogId="12834"/>
            </trnode>
        </trnode>
    </treeinfo>
    然后在程序里弄个函数,从这个文件里读出节点的内容,初始化树的内容,一个循环可以搞定答3:与上面的例子结合,在程序里根据读到的DialogId是多少而显示什么对话框,当然,也可以用mfc的那套动态创建技术,做到不用写死的,而是通过配置文件
      

  3.   

    http://support.microsoft.com/kb/155895