Восстановление окна
Что нужно сделать, чтобы это исправить? В аттаче - простой проект в среде Visual Studio 2003.
Буду благодарен, кто поможет разобраться!
В оконной процедуре окна-владельца обрабатывай сообщение WM_NCHITTEST. Если подчинённое окно существует - возвращай HTERROR, иначе отдавай сообщение на обработку функции DefWindowProc.
Может здесь нужно активировать окно, вызвать функцию установки фокуса, установки позиции,...?
[/quote]
Странный вопрос. Может потому, что она не даёт нужного ТЕБЕ результата???
Хорошо - объясню на пальцах:
Когда курсор попадает в регион, занимаемый окном, система постит сообщение WM_NCHITTEST с координатами курсора, которое обычно обрабатывает DefWindowProc, и на основе переданных параметров возвращает определённое значение, которое соответствует факту попадания в неклиентсую часть(заголовок, граница и т.д.), либо в клиентскую. Это значение в ответ на WM_NCHITTEST и возвращает WndProc. На основе полученного от WndProc значения система генерирует более высокоуровневые сообщения типа WM_MOUSEMOVE и ему подобные. Так вот HTERROR соответствует значению, которое может вернуть WndProc, чтобы показать системе, что координаты не лежат в пределах окна. Побочным эффектом HTERROR является также beep.
Всё это в сумме даёт эффект подобный тому, который мы можем наблюдать при использовании диалога, модального по отношению к другому окну.
И не надо никакого секса с EnableWindow, переключением фокуса и т.п.
При закрытии окна (прекращении модального показа) все делается наоборот...
Что-то подобное делается и в методе DoModal класса CDialogBox в MFC.