2002-11-3
【程序编程相关:SCCS Chapter 3】 【推荐阅读:SCCS Chapter 5】 凌晨,微困,茶水,香烟,音乐. 【扩展信息:SCCS Chapter 2】 解决了窗体布局后,该是组织挂接组件的时候了.可能有很多种方法解决组件注册问题,但考虑到要尽快进而主题,我选择了最简单的方法来实现组织问题.在注册表特定节点包含所有组件的描述.这个描述非常简单,name-value对.name是组件的编号,value是组件的clsid的字符串表示.组件通过自身的classfactory实现注册.每个组件通过实现一个叫ileregisterobject的接口来描述自己.ileregisterobject的描述如下: interface ileregisterobject : iunknown { [propget, id(1), helpstring("property image")] hresult image([out, retval] long *pval); [propget, id(2), helpstring("property name")] hresult name([out, retval] bstr *pval); [propget, id(3), helpstring("property describe")] hresult describe([out, retval] bstr *pval); [propget, id(4), helpstring("property category")] hresult category([out, retval] bstr *pval); };我选择atl作为组件实现的工具.ileregisterobject如此简单,因此它的实现没什么好说的.通过对组件的category对组件进行分类,最终形成categorylist与objectlist两级列表.我实现的第一个组件是一个立方体组件,因为手头上没有好的图标,就随便把ie的home按钮放了上去.呵呵,不过这个图标怎么看都像一个“狗窝”.剩下的动态toolbar的实现基本上就属于体力活了.
在近一步扩展组件的功能前,我先对组织组件的数据结构进行了调整.在图形编辑系统里,如果没有“层”的概念,使用起来应该是很不方便的.既然有了“层”,就需要添加一个层的管理维护界面.这时,我需要一个带有checkbox的ctreeview(就像下面图形显示的那样).当我构建起ctreeview后,对窗口上那些又黑又粗的checkbox非常不理解.... 下一页