По какой-то причине я сталкиваюсь с той же проблемой в .NET.
У меня есть (основная) форма, показывающая модальное диалоговое окно, которое мне нужно скрыть, взаимодействовать с главным окном и снова вернуться в модальное диалоговое окно.
Я лично не понимаю последствий с точки зрения Windows (API), но мне подходит следующее решение.
Весь трюк заключается в том, чтобы отключить основную форму перед показом модального диалогового окна (если для основной формы явно не установлено значение Enabled = false, то после скрытия модального диалогового окна взаимодействие с ним невозможно, даже когда вызывается Enabled = true).
В ответ на событие модального диалога (называемое NeedInteraction) я просто скрываю модальное диалоговое окно, включаю основную форму, в некотором цикле выполняю взаимодействие с пользователем, отключаю главное диалоговое окно и снова показываю модальное диалоговое окно.
void ShowDialog()
{
var dialog = new MyModalForm();
dialog.NeedInteraction += (sender, eventArgs) =>
{
dialog.Hide();
Enabled = true;
//wait till user finishes working with main window
Enabled = false;
dialog.Show();
}
Enabled = false;
dialog.ShowDialog();
Enabled = true; //don't forget to make it enabled afterwards
}
Возможно, это не чистое решение (поскольку не нужно скрывать модальное диалоговое окно), но оно работает, по крайней мере, для моей ситуации.