Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Пробую так создать окно
Код

  h := CreateWindowEx(0,
                      PChar('button'),
                      PChar('MyWindow'),
                      0,
                      0,
                      0,
                      0,
                      0,
                      HWND(HWND_MESSAGE),
                      0,
                      0,
                      nil);

но почему то компилятор говорит на 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
Цитата(ButtonOFF @  26.11.2009,  19:43 Найти цитируемый пост)
Какой раз убеждаюсь что делфи наикривейший компилятор,

Ну почему?
Смотрим исходники (в D7):
1. параметр CreateWindowEx.hWndParent имеет тип HWND = LongWord, т.е. беззнаковое. 
2. константа HWND_MESSAGE = -3, то есть отрицательное число, которое "не вписывается" в LongWord, т.к. LongWord предполагает только положительные числа.
Замечание компилятора в этом контексте вполне логично, как и необходимость приведения знаковой константы к беззнаковому целому.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)