第一个免费的MFC资源ID

时间:2015-10-27 12:12:43

标签: c++ mfc

我需要找到第一个免费的"控制资源ID" ( IDC _ )在MFC项目中用于在运行时创建新的控件元素。

我的目的是编写一个管理类,在运行时跟踪资源。要初始化这个课程,我需要知道" APStudio "分配的最后一个资源ID是什么? (VS2010的WYSIWYG资源编辑器)是。

查看" Resource.h "我可以为此ID找到 #defines _APS_NEXT_CONTROL_VALUE ) - 此值由WYSIWYG编辑器更新,可以解决我的问题。遗憾的是,这个定义在编译时没有激活,但仅在使用APStudio( #ifdef APSTUDIO_INVOKED )时才有效。 删除#ifdef导致ID被定义,但APStudio不再更新(以防万一有手动更改)。 总的来说,我想保留整个项目( Resource.h 等),因此我的课程可以普遍使用。

我希望我能以某种方式明确我的问题 - 如果没有,请随意提问。 非常感谢,阅读本文并帮助我解决这个问题: - )

1 个答案:

答案 0 :(得分:0)

控件的ID必须在其父窗口的范围内唯一。

为了唯一识别应用程序中的所有控件,例如,帮助系统将Dialog的ID和Control组合成一个用作帮助主题的DWORD。

另外,请不要第一个"免费" ID不一定会启动一系列免费ID。

要获取所有已使用ID的列表,您可以枚举所有子窗口,获取ID并从那里开始。或者,假设没有很多控件,您只需在循环中测试整数值:

ind freeID(0);
for(;;++freeID)
    if(GetDlgItem(hDlg, freeID) == 0)
        break;