【发布时间】:2015-10-27 12:12:42
【问题描述】:
我需要在 MFC 项目中找到第一个空闲的“控制资源 ID”(IDC_),以便在运行时创建新的控制元素。
我的目的是编写一个管理类,在运行时跟踪资源。要初始化这个类,我需要知道“APStudio”(VS2010 的 WYSIWYG 资源编辑器)分配的最后一个资源 ID 是什么。
查看“Resource.h”,我可以找到此 ID (_APS_NEXT_CONTROL_VALUE) 的 #defines - 此值由所见即所得的编辑器应该可以解决我的问题。遗憾的是,此定义在编译时无效,但仅在使用 APStudio (#ifdef APSTUDIO_INVOKED) 时无效。 删除 #ifdef 会导致 ID 被定义,但 APStudio 不再更新(以防有任何手动更改)。 一般来说,我想保留整个项目(Resource.h等),这样我的课程就可以普遍使用。
我希望我能以某种方式明确我的问题 - 如果没有,请随时提问。 非常感谢您阅读本文并帮助我解决这个问题:-)
【问题讨论】:
-
没有标准的方法来查询第一个“免费”资源 ID。即使有,您仍然无法通过 “如果其他人这样做会怎样” 测试,例如另一个在运行时创建控件并分配 ID 的对话框。 MFC 有一个文档描述了正在使用的 ID 范围 (TN020: ID Naming and Numbering Conventions),但这也无济于事。如果你真的想实现一个管理类,请通过他们的
HWNDs 引用控件,因为 ID 不必是普遍唯一的。 -
我害怕阅读这个答案。已经找到了 TN020,但得出的结论与您相同。我想我会深入使用 HWND - 非常感谢。
-
HWNDs 普遍识别窗口,因此它们是作为查找/管理键的自然选择。这也将处理多个窗口共享相同 ID 的情况。这对于静态控件很常见,例如,它们通常都共享相同的 ID:IDC_STATIC。