Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Восстановление окна

284
13 октября 2006 года
michael_is_98
587 / / 25.02.2005
создаю окно A, из пункта меню Help-About выполняется создание и показ окна B (окно A при этом делается недоступным при помощи вызова EnableWindow события WM_CREATE, которое посылается окну B). Закрываю окно B (окно A при этом делается доступным при помощи вызова EnableWindow события WM_DESTROY, которое посылается окну B). Окно B уничтожается. Но окно A остается вне зоны видимости.
Что нужно сделать, чтобы это исправить? В аттаче - простой проект в среде Visual Studio 2003.
Буду благодарен, кто поможет разобраться!
1.8K
13 октября 2006 года
k3Eahn
365 / / 19.12.2005
Можно сделать так:
В оконной процедуре окна-владельца обрабатывай сообщение WM_NCHITTEST. Если подчинённое окно существует - возвращай HTERROR, иначе отдавай сообщение на обработку функции DefWindowProc.
284
14 октября 2006 года
michael_is_98
587 / / 25.02.2005
А через EnableWindow чем не устраивает?
Может здесь нужно активировать окно, вызвать функцию установки фокуса, установки позиции,...?
1.8K
15 октября 2006 года
k3Eahn
365 / / 19.12.2005
[quote=michael_is_98]А через EnableWindow чем не устраивает?
[/quote]
Странный вопрос. Может потому, что она не даёт нужного ТЕБЕ результата???
Хорошо - объясню на пальцах:
Когда курсор попадает в регион, занимаемый окном, система постит сообщение WM_NCHITTEST с координатами курсора, которое обычно обрабатывает DefWindowProc, и на основе переданных параметров возвращает определённое значение, которое соответствует факту попадания в неклиентсую часть(заголовок, граница и т.д.), либо в клиентскую. Это значение в ответ на WM_NCHITTEST и возвращает WndProc. На основе полученного от WndProc значения система генерирует более высокоуровневые сообщения типа WM_MOUSEMOVE и ему подобные. Так вот HTERROR соответствует значению, которое может вернуть WndProc, чтобы показать системе, что координаты не лежат в пределах окна. Побочным эффектом HTERROR является также beep.
Всё это в сумме даёт эффект подобный тому, который мы можем наблюдать при использовании диалога, модального по отношению к другому окну.

И не надо никакого секса с EnableWindow, переключением фокуса и т.п.
284
16 октября 2006 года
michael_is_98
587 / / 25.02.2005
Ладно,я вижу это отдельная самостоятельная проблема. Смотрел, как это реализовано в Delphi - при показе модального окна все окна, принадлежащие текущему потоку, делаются недоступными через EnableWindow. Затем создается окно, которое будет TOPMOST.
При закрытии окна (прекращении модального показа) все делается наоборот...
Что-то подобное делается и в методе DoModal класса CDialogBox в MFC.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог