Jak zdefiniować prywatne wiadomości aplikacji?
Używałem prywatnych wiadomości w mojej aplikacji na ten rok:
UM_APP_BASE = WM_APP; // WM_APP is declared as WM_APP = $8000; in "Controls" unit.
a następnie zdefiniowałem moje prywatne wiadomości:
UM_EXPLORER_MSG = UM_APP_BASE + 1;
UM_LICENSE_CHANGE_MSG = UM_APP_BASE + 2;
etc...
I używaj ich w ten sposób w mojej klasie:
procedure UMLicenseChanged(var Message: TMessage); message UM_LICENSE_CHANGE_MSG;
(Ja też używamRegisterWindowMessage
„rozmawiać” z innymi aplikacjami, ale to inna historia)
Nie pamiętam, co skłoniło mnie do użyciaWM_APP
zamiastWM_USER
jako podstawa w pierwszej kolejności.
Dokumenty mówią:
Stała WM_USER służy do rozróżniania wartości komunikatów zarezerwowanych do użycia przez system Windows i wartości, które mogą być używane przez aplikację do wysyłania wiadomości w prywatnej klasie okna. Istnieje pięć zakresów numerów wiadomości:
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.
Co oznacza żeWM_APP
jest „zarezerwowany dla przyszłego użytku przez Windows”. Z drugiej strony Delphi używaCM_BASE = $B000;
który jest w tym zakresie. i równieżCN_BASE = $BC00;
Jak zdefiniować wiadomość podstawową, aby nie kolidowała z innymi komunikatami używanymi zarówno przez kontrolki Windows / Delphi / Inne? Która wiadomość podstawowa jest preferowana jako prywatna dla mojej aplikacji? i dlaczego?
Powinienem użyćWM_USER
zamiastWM_APP
? Zauważ, żeWM_USER
baza jest używana w CommCtrl przez Windows, np. np.TB_ENABLEBUTTON = WM_USER + 1
. itp...
Potrzebuję pewnych informacji na ten temat.
Przeczytałem to na moim API pomocy Delphi (D5). co jest oczywiście przestarzałe!
Prawdopodobnie dlatego zdecydowałem się użyćWM_APP
.
Mimo to wyjaśnienie różnicy między nimi byłoby miłe :)