MFC resource.h命令/消息ID

时间:2010-04-03 19:19:18

标签: mfc resources command messages

我正在开发一个MFC应用程序,这个应用程序多年来和不同的开发团队相当混乱。包含所有命令/消息映射的resource.h文件随着时间的推移变得非常大,并且存在许多问题(例如重复ID)。我不熟悉MFC,所以这个问题可能听起来很愚蠢......

MSDN文档提到命令ID和消息ID不应相应地小于WM_USER和WM_APP。我看到Visual Studio生成的resource.h中的大多数命令ID都是从100开始。这不应该导致某些干扰MFC / Windows命令和消息,这些命令和消息与应用程序定义的ID重叠吗?例如,我有一个命令ID:

#define ID_MY_ID 101

并且有一个具有相同ID的Windows命令。当MC将此命令发送到APP时,它会像应用程序定义的ID_MY_ID一样处理,并且应用程序正在执行不必要的操作。这是一种可能的情况吗?

此外,是否有一些第三方工具可以帮助分析项目资源?

更新1:

出现了新问题: 向应用程序类添加新自定义命令的首选方法是什么?据我所知,在以下列方式添加之前:将命令ID添加到resouce.h,然后将一个消息映射处理程序添加到处理类中。

3 个答案:

答案 0 :(得分:7)

你混合了两件事:

  1. 消息ID。这些必须大于WM_USER。消息ID未在resource.h中定义。从您的描述中可以看出,您没有使用应用私信。
  2. 命令ID。您的应用程序本身不得包含重复的命令ID。命令ID值也不应干扰afxres.h中定义的标准MFC ID。这些命令ID从0xE100开始,因此resource.h中的值不太可能。资源编译器将在您的rc文件
  3. 中为重复ID生成错误

    您可能无需手动编辑resource.h。

    我建议使用“资源符号”工具(右键单击资源视图中的资源,然后从弹出菜单中选择,我假设您使用的是VC ++),从resource.h中删除所有未使用的ID。

答案 1 :(得分:1)

命令消息在WM_COMMAND中使用参数中的命令id发送,因此它不会与其他消息冲突。

答案 2 :(得分:1)

通常,无需手动插入或编辑资源中的标识符(VS以正确的方式自动协调的标识符)。有些情况需要手动干扰标识符,但您可以从假设开始,以前的开发团队的资源是正确的。因此,如果您因资源没有遇到问题,请保持不变(恕我直言)。

“MSDN文档提到命令ID和消息ID不应相应地小于WM_USER和WM_APP。” - 看起来你好坏参半了。