这些时整理代码,有自己的,也有原来搜集来的。又翻动到了 TWL 上,许久没有往里面加东西了,因为我自己日常的使用基本够用了。想到原来一直就有想法,让它能用在手机开发上,只是一直没有太推进。这次既然遇上了,就把它实现了一下,目前也基本可以在手机上工作了。
上午计划写一个功能到 danspy 里,单独工程中测试通过后往里面集成,发现了 TWL 的一个弱点,窗口类的实例对象对自动创建和销毁的情况(例如在栈上分配或者作为其他类的成员)支持的很好,可是对于 new 和 delete 的情况支持很差。在对一个菜单项的响应代码中,在栈上创建了一个窗口,却不能工作,因为窗口虽然在,可是关联的对象已经由于超出作用域销毁了,于是程序就会崩溃。所以只能是 new 出来一个对象,等到 new 出来之后傻眼了,在哪儿 delete 啊?最理想的情况是窗口销毁时自动将与之关联的对象销毁,那最佳的时机是 WM_NCDESTROY 消息达到的时候。但在 WM_NCDESTROY 的消息处理器中加上 delete this 之后又发现了新问题,因为基类在此之后还要做一些清除工作,而这时对象已经被 delete 掉了,真是头大。终于明白了当初我没有给基类添加 OnFinalMessage 虚函数是一个错误的决定,好在改起来还比较容易,只是在最后窗口句柄倒来倒去的时候用了点小技巧,最后算是圆满完成。
由于在一个工程里我要用到颜色选取,所以下一步决定把原来缺失的公用对话框的支持先加上。由于 Vista 的原因,估计支持 File Dialog 又是一件头痛的事情。