首先看下MSDN的文章
Range | Description |
---|---|
From 0 through WM_USER –1 | Messages reserved for use by the system. |
From WM_USER through 0x7FFF | Integer messages for use by private window classes. |
WM_APP through 0xBFFF | Messages available for use by applications. |
0xC000 through 0xFFFF | String messages for use by applications. |
Greater than 0xFFFF | Reserved by the system for future use. |
看过之后是不是大概明白了。如果不还不明白的话。
#define WM_GET (WM_USER+112) 和 #define WM_GET (WM_APP+112)除了值不同外,有区别吗?
(1)WM_USER through 0x7FFF Integer messages for use by private window classes. WM_APP through 0xBFFF Messages available for use by applications.
(2)默认规则是以WM_USER+X(WM_USER--0x7fff)用于窗口级的消息,WM_APP+X(WM_APP--0xbfff)用于进程级的消息.
(3)我的理解:第一种定义用于进程内消息,第二种定义用于进程间消息
(4)约定俗成的一种规则。
WM_USER through 0x7FFF: 仅在自己预定义的窗口内部使用;
WM_APP through 0xBFFF: 在应用程序的其他地方均可使用
WM_USER through 0x7FFF: 仅在自己预定义的窗口内部使用;
WM_APP through 0xBFFF: 在应用程序的其他地方均可使用
例一:
如果程序的所有窗口和所有控件完全由你一个人实现,你完全可以不遵守这一规则。
但若有其他人写的代码或加载了外来的控件,如果你不遵守这一规则,发生冲突的概率会明显加大,可能会出现意想不到的结果。
但若有其他人写的代码或加载了外来的控件,如果你不遵守这一规则,发生冲突的概率会明显加大,可能会出现意想不到的结果。
例二:
这样的:我的COM里需要定义一个通知消息,来通知应用程序为它填充缓冲,这个COM是一个进程内的COM,当我#define WM_GET (WM_USER+112) 时,通过测试30次,可能要失败1次,用#define WM_GET (WM_APP+112)时,30次全成功,但现在不敢肯定是它引起的,有可能其他地方还会有影响。