由于是纯SDK编程,不能用MFC或WTL中已经存在的类。
想自己写一个CTreeCtrl,要求:① 动态添加内容并控制(想用指针数组实现,可否?);
② 支持插件:从pluginfo里得到Dialog的标题,再插入Tree里,并显示;
③ 控制当前显示的应该是哪个Dialog(传入序号,再以序号索引指针数组,得到Item标题,再比较,以决定显示哪个Dialog,并把其他Dialog都隐藏)。上述思路是否可行?如不行,正确思路?有没有SDK的类似源码?没学过MFC,看不懂MFC代码,请有过TreeControl开发经验的朋友指点一二,多谢!
想自己写一个CTreeCtrl,要求:① 动态添加内容并控制(想用指针数组实现,可否?);
② 支持插件:从pluginfo里得到Dialog的标题,再插入Tree里,并显示;
③ 控制当前显示的应该是哪个Dialog(传入序号,再以序号索引指针数组,得到Item标题,再比较,以决定显示哪个Dialog,并把其他Dialog都隐藏)。上述思路是否可行?如不行,正确思路?有没有SDK的类似源码?没学过MFC,看不懂MFC代码,请有过TreeControl开发经验的朋友指点一二,多谢!
解决方案 »
- atl 复合控件 atl怎样响应中子控件本身的事件,并在事件中做处理
- 如何在MFC开发的ActiveX控件上加载位图?
- 这几句代码不知道是什么意思,请求帮助!
- CPropSheet属性表有问题, 请进
- 怎么在view中显示一个CFileDialog呢?
- 询找 Visual Studio .NET 开发环境中的 docking功能?像 class view / solution explorer 窗口可靠在四边并有标签。
- ::PostMessage()函数的使用,请高手赐教!
- 问个很basic的问题,动态库和静态库应该如何装载,两者有什么区别?
- OpenGL实验程序,Link错误,请教原因。
- 我要在win2000中使用端口读写,该怎么做?
- 为什么这个Exe程序被其他进程调用的时,在初始化的时候会出错?
- 如何只滚动CDialog的部分窗口呢?
自已写一个类,封装treeview control就可以了。即使是edit控件,实现起来都不太容易,更何况是treeview。只有当你确定treeview不能满足你的特殊需求时,才会考虑自己实现。
③ 控制当前显示的应该是哪个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的那套动态创建技术,做到不用写死的,而是通过配置文件