По какой-то причине мне приходится сталкиваться с такой же проблемой в .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
}
Это может быть не чистое решение (как это не нужно для сокрытия модального диалога), но она работает, по крайней мере для моей ситуации.
Вам нужно взглянуть на диалоговые окна AutoCAD. Очень красиво оформленный ИМХО. –
AutoCAD is pricey =) –