delphi - 如何定义私有基础应用程序消息?

  显示原文与译文双语对照的内容
0 0

我是属于我的申请使用专用消息如下所示:

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其他应用程序" talk " 足,但那是另一回事)

我不记得我是怎么决定使用 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_USERbase是用于CommCtrl by Windows也e .g 。 TB_ENABLEBUTTON = WM_USER + 1. 等等。。

我需要一些对此问题的见解。


我上查阅此文Delphi帮助API ( D5 ) 。 这显然是过时 !
这也许是为什么已决定使用 WM_APP.
但是,关于两者的区别说明= = = = = 感觉好点

时间:原作者:6个回答

0 0

我不知道你的信息来自哪里。 在MSDN 文档说:

0 到WM_USER –1
消息保留供系统使用。

WM_USER通过0x7FFF
整数消息供私人使用窗口类。

WM_APP ( 0x8000 ) 到0xBFFF
消息可供应用程序使用。

0xC000通过0xFFFF
字符串消息,以供应用程序使用。

Greater比0xFFFF
被系统预留。


现在,有什么区别 WM_USER范围, WM_APP1 – 10范围内 此问题已在很多地方介绍。 例如,这里就是Raymond Chen有什么话

0x400 。。 0x7FFF ( WM_USER 。。 wm_APP 1 ) : 定义类消息。

这些消息的含义由window类的实现者决定。 ( informally: 人所调用RegisterClass为该窗口类。) 例如,WM_USER+1消息意味着TB_ENABLEBUTTON如果该窗口是一个toolbar控件,但这意味着TTM_ACTIVATE如果是tooltip控件,叫DM_SETDEFID如果是一个对话框。 如果创建自己的控件,又会发生什么事情else完全不同。 因为任何人都可以创建一个消息在此范围内,操作系统根本不知道参数的意思是,不能执行自动编组。

0x8000 。。 0xBFFF ( WM_APP 。。。 maxINTATOM 1 ) : 应用程序定义的消息。

这些消息的含义取决于创建对象的应用程序窗口。 ( informally: 该邮件的人所调用CreateWindow 。) 区域中创建了Windows 95,以确保应用程序窗口子类化并生成自定义消息不会影响到将来的版本中创建的新邮件窗口类 尽管本文中的任何人都可以创建一个消息在此范围内,操作系统根本不知道参数的意思是,不能执行自动编组。

最主要的要夺回所有就是说如果你定义中的消息 WM_USER范围,那么要准备应用程序中的其他控件同样具有自己的用于那些消息。 例如,你不能广播消息中 WM_USER范围。

另一方面,中的消息 WM_APP旨在在应用程序中所有不同的窗口类的含义是不同的范围。

原作者:
...