Пользовательские сообщения в неоконных классах - нужен обработчик по умолчанию?

С классом (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работает и для других сообщений (с очевидными нежелательными результатами).

Это было легко исправлено добавлением , если Message.Msg <> TH_MYMESSAGE то Exit; в HandleMyMessage. Мой вопрос: Почему это происходит?

Мое лучшее предположение состоит в том, что AllocateHWNDсделал HandleMyMessageэквивалентом DefWndProc, несмотря на то, что он имел директиву message.Есть ли правильный способ реализовать это, которого мне не хватает?

19
задан gabr 19 June 2012 в 07:13
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: