| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > OnCLose, OnDestroy на WinAPI |
| Автор: ButtonOFF 26.11.2009, 17:33 |
| Всем привет! Мучает меня один вопрос, как устроен механизм Закрытия и Убивание окна? Сам я думаю что отправляется сообщение моему окну, но кто? Могу я сам их обрабатывать без применения форм, например в безформеном приложении? Если можно, то подскажите как. |
| Автор: ButtonOFF 26.11.2009, 18:39 |
| Вот нашел, пойду разбиратся MSDN -> Windows -> Window Features -> Message-Only Windows : "A message-only window enables you to send and receive messages. It is not visible, has no z-order, cannot be enumerated, and does not receive broadcast messages. The window simply dispatches messages. To create a message-only window, specify the HWND_MESSAGE constant or a handle to an existing message-only window in the hWndParent parameter of the CreateWindowEx function. You can also change an existing window to a message-only window by specifying HWND_MESSAGE in the hWndNewParent parameter of the SetParent function. To find message-only windows, specify HWND_MESSAGE in the hwndParent parameter of the FindWindowEx function. In addition, FindWindowEx searches message-only windows as well as top-level windows if both the hwndParent and hwndChildAfter parameters are NULL." |
| Автор: ButtonOFF 26.11.2009, 19:43 | ||
Пробую так создать окно
но почему то компилятор говорит на HWND_MESSAGE - "Constant expression violates subrange bounds" This error message occurs when the compiler can determine that a constant is outside the legal range. This can occur for instance if you assign a constant to a variable of subrange type. Т.е что, делфи не разрешает создавать такие окна ? Создаю в D7. Народ попробуйте у себя создать. UPDATE Ептеть как все запущенно, в общем вместо HWND_MESSAGE нужно HWND(HWND_MESSAGE). Какой раз убеждаюсь что делфи наикривейший компилятор, но учится на нем проще чем на других. |
| Автор: kami 27.11.2009, 00:42 |
Ну почему? Смотрим исходники (в D7): 1. параметр CreateWindowEx.hWndParent имеет тип HWND = LongWord, т.е. беззнаковое. 2. константа HWND_MESSAGE = -3, то есть отрицательное число, которое "не вписывается" в LongWord, т.к. LongWord предполагает только положительные числа. Замечание компилятора в этом контексте вполне логично, как и необходимость приведения знаковой константы к беззнаковому целому. |