Delphi 如何定义私有基应用程序消息?
我在我的应用程序中使用私人消息的时间如下:Delphi 如何定义私有基应用程序消息?,delphi,winapi,messages,Delphi,Winapi,Messages,我在我的应用程序中使用私人消息的时间如下: 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 Mes
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\u应用程序而不是WM\u用户
作为基础。
文件说:
WM_用户常数用于区分消息值
保留供Windows使用的值和可由
在私有窗口类中发送消息的应用程序。有
消息编号的五个范围:
这意味着WM_APP
是“为Windows的未来使用而保留的”。
另一方面,德尔福使用CM_BASE=$B000代码>在该范围内。还有CN_BASE=$BC00代码>
如何定义基本消息,使其不会与Windows/Delphi/其他控件使用的其他消息冲突?
我的应用程序首选哪种基本消息作为私有消息?为什么呢?
我应该使用WM\u用户
而不是WM\u应用程序
?请注意,WM\u USER
base也由Windows在CommCtrl中使用,例如TB\u ENABLEBUTTON=WM\u USER+1
。等等
我需要一些关于这个问题的见解
我在我的Delphi帮助API(D5)上读到了这篇文章。这显然已经过时了
这可能就是为什么我决定使用WM\u应用程序
不过,解释一下两者之间的区别还是不错的:)我不知道你的信息来自哪里。MSDN说:
0到WM_用户–1
保留供系统使用的消息
WM_用户通过0x7FFF
私有窗口类使用的整数消息
WM_应用程序(0x8000)到0xBFFF
可供应用程序使用的消息
0xC000到0xFFFF
应用程序使用的字符串消息
大于系统保留的0xFFFF
现在,WM_用户
范围和WM_应用程序
范围之间有什么区别?这在许多地方都有涉及。例如
0x400。。0x7FFF(WM\U USER..WM\U APP-1):类定义的消息。
这些消息的含义由
窗口类。(非正式:由调用RegisterClass的人员进行)
例如,WM_USER+1消息意味着
TB_ENABLEBUTTON,如果窗口是工具栏控件,但它意味着
如果是工具提示控件,则TTM_激活,如果
这是一个对话框。如果您创建了自己的控件,则意味着
其他完全不同的东西。因为任何人都可以创造一个
消息在此范围内,操作系统不知道
参数意味着无法执行自动编组
0x8000。。0xBFFF(WM_应用程序…MAXINTATOM-1):应用程序定义的消息。
这些消息的含义由
创建窗口。(非正式地:由打电话的人
CreateWindow。)此消息区域是在Windows 95中创建的,以确保
对窗口进行子类化并生成自定义消息的应用程序
不会干扰中窗口类创建的新消息
未来版本。再说一次,因为任何人都可以在这里创建消息
范围内,操作系统不知道参数的含义和
无法执行自动编组
从所有这些中可以看出,如果您在WM\u USER
范围内定义消息,那么就要准备好让应用程序中的其他控件自己使用这些消息。例如,您不能在WM_USER
范围内广播消息
另一方面,WM_APP
范围内的消息对于应用程序中的所有不同窗口类具有相同的含义。您可能已经阅读了或的文档,其中他们说“WM_APP(0x8000)到0xbff-应用程序可使用的消息”对于您自己的窗口类来说,WM_USER
base是完全安全的(除非该类是某个公共窗口控件的后代)。当然,这类消息的发送者永远不应该对它们进行广播。@WM_USER
范围内的kobik消息对于不同的窗口类有不同的含义。“所以播放这些节目总是一个错误。”科比克,我想我明白你问题的意思了。您希望从WM\u应用程序
base开始,在不与CM\u
或CN\u
消息发生任何冲突的情况下,为自己的目的创建一个真正的消息范围。好吧,那么我会说,WM_APP..CM_BASE-1
应该是您要找的。@kobik好吧,例如,TSpeedButton向它的家长广播。直接向父母发送信息与“广播”不同。因此,关键是WM_用户范围内的消息允许重叠,因为它们不应该不加区别地向所有人和其他人广播。但是WM_用户消息可以专门发送/发布到应该能够处理它们的预期目标。(即使这些消息ID与为其他控件设计的其他消息ID重叠。)
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.