5

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

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

#define ID_MY_ID 101

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

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

更新1:

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

4

3 回答 3

7

你混合了两件事:

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

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

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

于 2010-04-04T07:57:56.810 回答
1

命令消息在 WM_COMMAND 中发送,参数中带有命令 ID,因此不会与其他消息冲突。

于 2010-04-03T20:40:47.827 回答
1

一般不需要手动插入或编辑资源中的标识符(由VS自动以正确方式分配的标识符)。在某些情况下,需要手动干预标识符,但您可以先假设,以前有资源的开发团队的工作是正确的。因此,如果您没有因为资源而遇到问题,请保持原状(恕我直言)。

“MSDN 文档提到命令 ID 和消息 ID 不应相应小于 WM_USER 和 WM_APP。” - 看来你搞混了。

于 2010-04-03T22:59:34.720 回答