关于windows消息常量是UINT却只能使用WORD的问题

xiaohuh421 2014-12-17 11:51:35
使用消息的相关API, 比如SendMessage等等, 对于msg这一个参数都是UINT类型, 但当你传入一个大于0x1FFFF的消息常量进去.
你会发现什么都不响应了.

虽然不是严格的UINT, 但是MSDN也没有说明消息ID不能大于0x1FFFF.

MSDN中只有关于 0-0xFFFF的描述, 大于0xFFFF的部分却没有任何说明:

The system reserves message-identifier values in the range 0x0000 through 0x03FF (the value of WM_USER – 1) for system-defined messages. Applications cannot use these values for private messages.
Values in the range 0x0400 (the value of WM_USER) through 0x7FFF are available for message identifiers for private window classes.
If your application is marked version 4.0, you can use message-identifier values in the range 0x8000 (WM_APP) through 0xBFFF for private messages.
The system returns a message identifier in the range 0xC000 through 0xFFFF when an application calls the RegisterWindowMessage function to register a message

所以想问:
为什么定义了UINT类型, 却不支持大于0x1FFFF的消息常量ID, 浪费这么多空间呢?
...全文
164 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-12-25
  • 打赏
  • 举报
回复
本ID通常猜得还是挺准的。不信楼主可以试试在百度搜“zhao4zhong1 我猜 site:bbs.csdn.net”
真相重于对错 2014-12-18
  • 打赏
  • 举报
回复
你所谓的不响应是什么意思?
oyljerry 2014-12-18
  • 打赏
  • 举报
回复
为了以后扩展,现在等于没有用到,windows里面很多API都有reserved的参数
fengswd 2014-12-18
  • 打赏
  • 举报
回复
一方面保持和16位windows的兼容,另一方面,目前定义的消息已经足够使用,以后的版本可能会将消息的范围扩充到16位以后那也说不定
Saleayas 2014-12-18
  • 打赏
  • 举报
回复
32 位是机器上最快的数据类型。
typedef unsigned int       uint_fast32_t;
至于是否浪费了空间? 没有。这个数据是在堆栈上的。 就是一个字节压栈,也是 32 位的。
xiaohuh421 2014-12-18
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
为了和16位Windows尽量兼容。我猜。
赵老师都不知道, 是用猜的.. 那估计真是那样, 因为MSDN中都只说了0xFFFF的那部分, 0x10000 - 0x1FFFF那部分可能在XP上或者更老的版本中是无法使用的.
引用 3 楼 wxhxj0268 的回复:
MFC中UINT是这样定义的

typedef unsigned int        UINT;
而int的长度在不同的系统中可能不同,比如16位系统中通常为0xFFFF,32位系统中可能为0xFFFF FFFF,因此,在需要使用int长度时,通常不直接用4或2字节,而使用sizeof(int)来保证程序的通用性。
可能跟赵老师说的是一个意思. 不知道有没有人跟过反汇编代码, 内部具体是怎么处理的.
赵4老师 2014-12-17
  • 打赏
  • 举报
回复
为了和16位Windows尽量兼容。我猜。
笨笨仔 2014-12-17
  • 打赏
  • 举报
回复
MFC中UINT是这样定义的

typedef unsigned int        UINT;
而int的长度在不同的系统中可能不同,比如16位系统中通常为0xFFFF,32位系统中可能为0xFFFF FFFF,因此,在需要使用int长度时,通常不直接用4或2字节,而使用sizeof(int)来保证程序的通用性。
hhhh63 2014-12-17
  • 打赏
  • 举报
回复
大于0x1FFFF可能有别的用吧

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧