С классом (TObject) у меня есть:
private
FHwnd : HWND;
procedure HandleMyMessage(var Message : TMessage); message TH_MYMESSAGE;
где TH_MYMESSAGE = WM_USER + 1
В конструкторе класса:
FHwnd := AllocateHWND(HandleMyMessage);
Единственным объектом, который получает ссылку на FHwnd
, является частный пользовательский TThread (созданный в этом классе), и единственным сообщением, которое он публикует, является TH_MYMESSAGE
. Я понимаю, что директива message
в объявлении процедуры ограничивает ее обработку только TH_MYMESSAGE
.
Это отлично работает при тестировании, но после интеграции в гораздо более крупное приложение, я получаю обратную связь, что HandleMyMessage
запускает и другие сообщения (с очевидными нежелательными результатами).
Это было легко исправлено, добавив if Message.Msg <> TH_MYMESSAGE then Exit;
в HandleMyMessage
. Мой вопрос: почему это происходит?
Мое лучшее предположение состоит в том, что AllocateHWND
сделал HandleMyMessage
эквивалент a DefWndProc
, несмотря на то, что он имеет директиву message
. Есть ли правильный способ реализовать это, что мне не хватает?