wxWidgets似乎没有事件广播机制

wxWidgets的任意object产生了事件之后,似乎只能向父层传递,并且“一路向上”的往上传递。既不能向下传递、也不能横向传递。换言之,wxWidgets的事件是不能进行“广播”的。虽然没有通读过所有关于wxWidgets的文档,但是感觉上面的结论应该是准确的。 如果将整个窗口及上面所有的组件看做一颗“树”,任意节点上产生的事件,在“不能广播”的前提下,唯有这个节点的“父亲”是唯一的。 如果这个事件可以“向下传递”,那么任意节点下面的子节点有可能是多个,向下传递意味着就是“广播给所有的子节点”。 同理,如果能够横向传递,必然是先从当前节点向上传递给父节点,再由父节点广播给所有子节点,才能令兄弟节点收到消息。或者换一种想法,任意节点的兄弟节点也可能是多个,所以“横向传递”意味着有多个兄弟节点等待接收事件,由成了广播机制。 所以“没有广播能力”就意味着不能向子节点和兄弟节点发送事件。反之:不能向子节点发送通知就是在说不能进行广播。两种表述是一样的,就是不能只依靠事件对项目进行彻底的解耦开发。 没有广播机制,程序的解耦程度会大打折扣。我现在就遇到了好几处问题。总要迂回着完成事件的传递、或由“中间人”帮忙进行控制的操纵,代码写的凌乱不说、更重要的是这样“千回百转的羊肠小路”做控制的纽带,总担心日后会忘记它们之间的联系。 另一方面,这条“羊肠小径”无论多么的纵曲幽深,都一定不能中断。但是对于复杂的窗口应用程序、尤其是还在不断调整的开发阶段,页面上的控件总会不断地调整、新建、删除,不断的做出重新规划,每一次规划都要想着其中不知有多少“羊肠小径”需要连带着调整。既痛苦、又易出错。 虽然现在我用了一个全局单例来缓解问题,令代码可以尽可能的解耦;也缓解了组件的迁移需要不断调整众多“羊肠小径”的尴尬,但终归觉得还是不完美。此时此刻,这个痛苦的问题,着实令我有些疲倦。

wxWidgets框架下程序的正确终止方式

我正在基于wxWidgets3.2.5写一个小工具,这个小程序并非只有一个MyFrame,而是可能会在不同的场景中有不同的窗口被创建并显示出来、仅仅依靠Frame的Close按钮,是不能将程序真正结束掉的,即使有一些方法可以将程序终止掉,但用得不对则可能导致出现内存泄漏。虽然程序终止的时刻产生内存泄漏并不是什么问题,因为泄露的内存最终由系统回收了,但找到正确的程序终止方式,终归是有益无害的。 待续 update 2024.05.15:因为我最终决定放弃使用wxWidgets框架进行软件的开发,所以这篇文章的“待续”部分也就没有必要写了。