Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在运行时动态分配MFC命令ID_C++_Mfc_Custom Controls - Fatal编程技术网

C++ 在运行时动态分配MFC命令ID

C++ 在运行时动态分配MFC命令ID,c++,mfc,custom-controls,C++,Mfc,Custom Controls,我有一个类似于MFC控件的菜单,它拥有许多菜单项(带有命令ID)。菜单项的数量以及结构在运行时会动态变化。这意味着我必须创建控件并不时动态分配新ID 到目前为止,我所做的是保留一个较大的静态ID范围,并按顺序分配它们。即使范围相当大,我担心我会在没有ID的情况下结束。我也不能从头开始,因为我不知道以前分配的ID中有哪些已被释放 我的第一个想法是在当前资源句柄中找到最大的命令ID,然后从那里开始。但我不知道如何做到这一点 还是有更好的管理方法?我想我可能不是第一个遇到这种问题的人。嗯。ID不太可能

我有一个类似于MFC控件的菜单,它拥有许多菜单项(带有命令ID)。菜单项的数量以及结构在运行时会动态变化。这意味着我必须创建控件并不时动态分配新ID

到目前为止,我所做的是保留一个较大的静态ID范围,并按顺序分配它们。即使范围相当大,我担心我会在没有ID的情况下结束。我也不能从头开始,因为我不知道以前分配的ID中有哪些已被释放

我的第一个想法是在当前资源句柄中找到最大的命令ID,然后从那里开始。但我不知道如何做到这一点


还是有更好的管理方法?我想我可能不是第一个遇到这种问题的人。

嗯。ID不太可能用完。您可以从WM_USER开始,每次用1递增ID。但是如果您真的认为可以用完ID,那么您可以使用一个堆栈或列表来保存已使用的ID,并在下次需要ID时重用它们。处理完消息后,使用push(ID)方法将ID添加到堆栈中(您可以使用MFC中ON_消息宏的LPARAM传递ID)。然后,当您需要一个新ID时,首先检查ID堆栈是否为空,如果不是,则使用pop()获取顶部ID。只有当ID堆栈为空时,才使用范围ID中的最后一个可用ID。

“我不知道以前分配的ID中有哪些已被释放”-那么这是否不在您的控制之下?机制是什么?至少我这么认为,因为主机控件和菜单项控件来自专有库。但你的问题在我脑海里激起了一个念头。谢谢!:-)A在我的资源中有很多其他静态命令ID。因此,如果我开始使用以WM_USER开头的id,我很可能会干扰其他命令id。不管怎么说,堆叠是个好主意。我会仔细考虑的,谢谢!