Ищем диаграмму перехода состояний для жизненного цикла немодальных диалогов MFC - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь исправить или заменить некоторый устаревший код в приложении C ++ MFC, которое управляет картой перечислений, чтобы открыть (или еще не открытые) дочерние немодальные диалоги. Текущий код делает недопустимые предположения, приводящие к ошибкам и сбоям.

Я ищу диаграмму переходов между состояниями (либо от Microsoft, либо из блога или статьи), чтобы я мог убедиться, что мой код замены правильно обрабатывает все возможные переходы состояний (открытие, начало закрытия, закрытие отменено и т. Д.) .) это может происходить с немодальным диалоговым окном MFC.

Устаревший код отображения предполагает, что закрытие диалога всегда происходит успешно (это не так), дочерний код предполагает, что менеджер все еще помнит, кто он (может и не быть), и повторный вход обрабатывается менеджером и дочерним элементом, взаимно перекрывая друг друга с foo->public_private_member = 0;, пока не будет достигнута фиксированная точка.

В отличие от этого, я считаю, что правильный подход заключается в том, что менеджеру необходимо отслеживать как минимум три состояния для каждого ребенка: open, closing и closed. Только дочерний диалог должен выполнять переход состояния closing --> closed (потому что это может быть отменено или отложено).

Чтобы синхронизировать мои простые конечные автоматы с состоянием диалогов MFC, мне нужно знать правильные места для размещения моих «хуков» (какие виртуальные методы переопределяются или сообщения обрабатываются).

Я могу понять некоторые из них по здравому смыслу, но есть несколько вещей, которые я не знаю, на которые, я думаю, могла бы ответить диаграмма:

  1. Как узнать, что моя ментальная модель жизненного цикла диалога MFC верна?
  2. Как я узнаю, что нашел все места, где нужно перехватывать события?
  3. Между двумя сообщениями или виртуальными методами, которые оба запускаются во время события, которое является наиболее подходящим для использования, и достаточно ли одного или есть пути, которые обходят одно или другое?

Мне удалось найти фрагменты этой информации в виде текстовой документации и советов, но я до сих пор не смог найти диаграмму .

...