WEB开发网
开发学院软件开发VC 编写可复用性更好的C++代码:Band对象和COMToys(4)... 阅读

编写可复用性更好的C++代码:Band对象和COMToys(4)

 2006-07-21 11:46:12 来源:WEB开发网   
核心提示: 下面简单说说调试问题,一般外壳扩展的调试可以参照精华区中一篇文章:"如何调试Windows外壳扩展"所讲的办法(窍门是用Ctrl+Alt+Shift关闭外壳,编写可复用性更好的C++代码:Band对象和COMToys(4)(3),然后以explorer.exe作为调试进

下面简单说说调试问题,一般外壳扩展的调试可以参照精华区中一篇文章:"如何调试Windows外壳扩展"所讲的办法(窍门是用Ctrl+Alt+Shift关闭外壳,然后以explorer.exe作为调试进程运行调试器),但是,在调试桌面Band时。这个方法不灵,原因是最后总是锁住DLL。然后又得重启机器,真是糟透了,我真是厌烦 debugging 调试。幸好用TRACE也能跟踪,这是我喜欢的一种调试工具。但偶尔要借助于系统级的调试器。

当我第一次实现MyBands时,在处理记忆用户选中了哪一个搜索引擎的地方不成功。那是因为我在对象的析构函数中存储相应状态——但不知什么原因析构函数没有被调用,就像我前面说过的,Windows没有销毁对象,它只是关闭了窗口。所以我将存储代码移到PostNcDestroy中才解决了问题。但是,如果即便用户关闭了它,对象仍然存活的话,那就没有必要存储状态设置,因为它们仍然还在内存中。不是吗?

所有这些小问题都是因为一个大问题导致的,通过TRACE的输出显示:每次你隐藏或显示某个桌面Band时,资源管理器都创建一个新的Band对象。它决不会释放旧的那一个!分析一下就知道了,如果CMyDeskBand是916个字节,并且我有128MB RAM内存,在Windows内存耗尽之前,我能隐藏或显示多少次对象呢?微软已经承认了他们这个愚蠢的错误并答应不久就解决它。

挑完了毛病,再回到Band的种类问题上,我在开始的时候谈到了有三种类型的Band对象。其实还有第四种:那就是工具栏Band。为了搞清楚这些术语的意思,我的头已经被弄得蒙嚓镲了,工具栏Band位于IE 的Rebar中。IE5.0中的"电台"就是工具栏Band的一个例子。(你不知道IE现在有一个无线电接收装置吗?小意思啦,IE6.0可能会有HDTV呢!)

上一页  1 2 3 4 5 6 7  下一页

Tags:编写 复用 更好

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接