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