Обработка WM_CLOSE
На сколько я понимаю, современная концепиця обработки событий от пользователя заключается в периодическом получении сообщений от внешних устройств, которые локализуются приложенеим в сообщения от гуёвых гаджетов и устройств, и заносятся в некий стек уникальный для каждого процесса на момент его выполнения.
В процессе своей работы процесс периодически черпает сообщения из стека и выполняет проассоциированную с ними функцию (карта сообщений в MFC [которая, насколько мне известно, являетя макро-командой и разворачиывается в соответсвтующий код]), или обновляет состояние внутренних переменных, наткнувшись на соответствующий запрос ( MouseHitи подобные в Blitz). После чего сообщение удаляется. Причём, входе обработки могут быть порождены новые сообщения (WM_CLOSE вызывает WM_DESTROY и WM_NCDESTROY [они провоцируются ф-цией DestroyWindow( ), которая была взывана ф-цией OnClose() - обработчиком для WM_CLOSE]).
Если Windows в ходе выполнения процесса обнаруживает "застой" в обработке сообщений (пользователь судорожно колошматит по зависшей форточке - а та выполняет громоздкий цикл, и, соответвенно, сейчас не происходит анализ сообщений - стек продолжает увеличиваться) - то она предлагает пользователю принудительно завершить работу приложения, обозначив её как "не отвечает".
Теперь вопрос:
В каких дебрях спрятана обработка события WM_CLOSE в прогах, скомпиленных Blitz3D. Ведь программа закрывается штатно, даже если она была прервана на выполнении цикла! Значит обработка сообщения происходит не при вызове соответствующих функий опроса (как было предположено выше), а отдельно - причём не понятно где: ну не через команду же прога это делает?
И ещё вопрос - как эффиктивнее всего реализовать перехват закрытия через WM_CLOSE на б3д?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|