寻找状态转换图以了解无模式MFC对话框的生命周期

时间:2019-06-04 17:08:38

标签: mfc windows-messages modeless-dialog

我正在尝试修复或替换C ++ MFC应用程序中的一些旧代码,该应用程序管理枚举ID映射以当前打开(或尚未打开)子无模式对话框。当前代码做出无效假设,导致错误和崩溃。

我正在寻找状态转换图(来自Microsoft或来自博客或文章),以便确保我的替换代码正确处理所有可能的状态转换(打开,开始关闭,关闭已取消等) 。)可能会在MFC无模式对话框中发生。

旧版映射代码假定关闭对话框总是成功(不是),子代码假定管理者仍然记得自己是谁(可能不是),并且重入由管理者和子级相互处理与foo->public_private_member = 0;一起使用,直到到达固定点为止。

相反,我认为正确的方法是管理者需要为每个孩子跟踪至少三个状态:openclosingclosed。只有子对话框才能执行closing --> closed状态转换(因为它可能被取消或延迟)。

为了使我的简单状态机与MFC对话框的状态同步,我需要知道放置“钩子”(要覆盖的虚拟方法或要处理的消息)的正确位置。

我可以根据常识找出一些答案,但是有些我不知道图表可以回答的事情:

  1. 我怎么知道我的MFC对话框生命周期的心理模型是正确的?
  2. 我如何知道是否找到了所有需要挂起事件的地方?
  3. 在事件期间触发的两条消息或虚拟方法之间,这是最合适的一种,是否足够,或者是否存在绕过一条或另一条的路径?

我已经能够以文本文档和技巧的形式找到这些信息的点点滴滴,但到目前为止,我还找不到 strong>。

0 个答案:

没有答案