#include <vcl.h>
#include <windows.h>
......
......
while (GetMessage(&lpMsg,NULL,0,0)) {
if (lpMsg.message == WM_CLOSE) lpMsg.message=NULL;
DispatchMessage(&lpMsg);
}
Сравнение сообщений виндоус.
Код:
Однако мои старания оказываются безуспешными. И окно нагло берет и закрывается, если нажать к прмеру на крестик.
Единсвенный способ предотвратить конешно закрытие окна.. Это в обработчике событий окна
Код:
case WM_CLOSE:
PostQuitMessage(0);
PostQuitMessage(0);
Убрать этот PostQuiteMessage(0). Да, если я его уберу то все нормально, окно не закрывается, потому что нету кода закрытия. Но я так не хочу, я хочу уничтожить сообщение еще на стадии его получения.
Если же написать
Код:
#include <vcl.h>
#include <windows.h>
......
......
while (GetMessage(&lpMsg,NULL,0,0)) {
if (lpMsg.message == 160)ShowMessage("Двигаем Мышкой по заголовку окна");
DispatchMessage(&lpMsg);
}
#include <windows.h>
......
......
while (GetMessage(&lpMsg,NULL,0,0)) {
if (lpMsg.message == 160)ShowMessage("Двигаем Мышкой по заголовку окна");
DispatchMessage(&lpMsg);
}
Код срабатывает, и когда мышка оказывается на заголовке, то появляется надпись.
Число 160 узнал опытным путем. Просто в наглую, стал писать
Код:
#include <vcl.h>
#include <windows.h>
......
......
while (GetMessage(&lpMsg,NULL,0,0)) {
ShowMessage(lpMsg.message);
DispatchMessage(&lpMsg);
}
#include <windows.h>
......
......
while (GetMessage(&lpMsg,NULL,0,0)) {
ShowMessage(lpMsg.message);
DispatchMessage(&lpMsg);
}
И еще заметил такую вещь
Код:
while (GetMessage(&lpMsg,NULL,0,0)) {
if (lpMsg.message==161)lpMsg.message=NULL;
DispatchMessage(&lpMsg);
}
if (lpMsg.message==161)lpMsg.message=NULL;
DispatchMessage(&lpMsg);
}
То обнуляются вообще все сообщения, и окно перестает реагировать вообще на ВСЁ.
Почему так происходит?
Смотри файл-заголовочники.
Все сообщения объявлены в них. Например:
#define WM_CLOSE 0x0010
Найди директиву в которой объявлено сообщение с кодом 161 (их наверняка будет несколько, тебе надо только WM)и сделай выводы сам - почему у тебя все перестает работать.
Нажатие на крестике генерирует сообщение WM_SYSCOMMAND с wParam=SC_CLOSE