我正在尝试修复或替换C ++ MFC应用程序中的一些旧代码,该应用程序管理枚举ID映射以当前打开(或尚未打开)子无模式对话框。当前代码做出无效假设,导致错误和崩溃。
我正在寻找状态转换图(来自Microsoft或来自博客或文章),以便确保我的替换代码正确处理所有可能的状态转换(打开,开始关闭,关闭已取消等) 。)可能会在MFC无模式对话框中发生。
旧版映射代码假定关闭对话框总是成功(不是),子代码假定管理者仍然记得自己是谁(可能不是),并且重入由管理者和子级相互处理与foo->public_private_member = 0;
一起使用,直到到达固定点为止。
相反,我认为正确的方法是管理者需要为每个孩子跟踪至少三个状态:open
,closing
和closed
。只有子对话框才能执行closing --> closed
状态转换(因为它可能被取消或延迟)。
为了使我的简单状态机与MFC对话框的状态同步,我需要知道放置“钩子”(要覆盖的虚拟方法或要处理的消息)的正确位置。
我可以根据常识找出一些答案,但是有些我不知道图表可以回答的事情:
我已经能够以文本文档和技巧的形式找到这些信息的点点滴滴,但到目前为止,我还找不到 图 strong>。