Я использую личные сообщения в своем приложении за год следующим образом:
UM_APP_BASE = WM_APP; // WM_APP is declared as WM_APP = $8000; in "Controls" unit.
а затем определил мои личные сообщения:
UM_EXPLORER_MSG = UM_APP_BASE + 1;
UM_LICENSE_CHANGE_MSG = UM_APP_BASE + 2;
etc...
И используйте их в моем классе:
procedure UMLicenseChanged(var Message: TMessage); message UM_LICENSE_CHANGE_MSG;
(Я также использую RegisterWindowMessage
для "разговора" с другими моими приложениями, но это совсем другая история)
Я не помню, почему я решил использовать WM_APP
, а не WM_USER
как базу в первую очередь.
В документах говорится:
Константа WM_USER используется для различения значений сообщений которые зарезервированы для использования Windows и значения, которые могут использоваться приложение для отправки сообщений в классе частного окна. Есть пять диапазонов номеров сообщений:
Range Meaning
0 through WM_USER - 1 Messages reserved for use by Windows.
WM_USER through 0x7FFF Integer messages for use by private window classes.
0x8000 through 0xBFFF Messages reserved for future use by Windows.
0xC000 through 0xFFFF String messages for use by applications.
Greater than 0xFFFF Reserved by Windows for future use.
Это означает, что WM_APP
"зарезервировано для будущего использования Windows".
С другой стороны, Delphi использует CM_BASE = $B000;
, который находится в этом диапазоне. а также CN_BASE = $BC00;
Как определить базовое сообщение, чтобы оно не совпадало с другими сообщениями, используемыми как с помощью элементов управления Windows/Delphi/Other?
Какое базовое сообщение предпочтительнее частного для моего приложения? и почему?
Должен ли я использовать WM_USER
вместо WM_APP
? Обратите внимание, что база WM_USER
используется в CommCtrl Windows, например. TB_ENABLEBUTTON = WM_USER + 1
. и т.д.
Мне нужна информация по этой проблеме.
Я прочитал это в моем API-интерфейсе Delphi (D5). который, очевидно, устарел!
Вероятно, поэтому я решил использовать WM_APP
.
Тем не менее, объяснение различий между ними было бы приятным:)