Я пытаюсь исправить или заменить некоторый устаревший код в приложении C ++ MFC, которое управляет картой перечислений, чтобы открыть (или еще не открытые) дочерние немодальные диалоги. Текущий код делает недопустимые предположения, приводящие к ошибкам и сбоям.
Я ищу диаграмму переходов между состояниями (либо от Microsoft, либо из блога или статьи), чтобы я мог убедиться, что мой код замены правильно обрабатывает все возможные переходы состояний (открытие, начало закрытия, закрытие отменено и т. Д.) .) это может происходить с немодальным диалоговым окном MFC.
Устаревший код отображения предполагает, что закрытие диалога всегда происходит успешно (это не так), дочерний код предполагает, что менеджер все еще помнит, кто он (может и не быть), и повторный вход обрабатывается менеджером и дочерним элементом, взаимно перекрывая друг друга с foo->public_private_member = 0;
, пока не будет достигнута фиксированная точка.
В отличие от этого, я считаю, что правильный подход заключается в том, что менеджеру необходимо отслеживать как минимум три состояния для каждого ребенка: open
, closing
и closed
. Только дочерний диалог должен выполнять переход состояния closing --> closed
(потому что это может быть отменено или отложено).
Чтобы синхронизировать мои простые конечные автоматы с состоянием диалогов MFC, мне нужно знать правильные места для размещения моих «хуков» (какие виртуальные методы переопределяются или сообщения обрабатываются).
Я могу понять некоторые из них по здравому смыслу, но есть несколько вещей, которые я не знаю, на которые, я думаю, могла бы ответить диаграмма:
- Как узнать, что моя ментальная модель жизненного цикла диалога MFC верна?
- Как я узнаю, что нашел все места, где нужно перехватывать события?
- Между двумя сообщениями или виртуальными методами, которые оба запускаются во время события, которое является наиболее подходящим для использования, и достаточно ли одного или есть пути, которые обходят одно или другое?
Мне удалось найти фрагменты этой информации в виде текстовой документации и советов, но я до сих пор не смог найти диаграмму .