What would be the best way to represent the dialogs?
Abstractify similar to the map, create an interface where you return a queue of structs containing all pending messages and valid answers (and maybe some more information) and then poll from the UI on every action. Internally you create a tree, graph or a simple state engine to deal with the possible answers.
What do you mean by "messages" here? Like telling the dialog to add an item to its list box, etc.? What uses the queue? What do you mean by "answers"?
As when I hear "messages" in a dialog context, I think of like how the Windows API works, where you have messages to/from a window signalling various things going on (add item to list box, resize window, etc. -- obviously, this simple system only a subset of all that would be needed).