我有一个类似菜单的MFC控件,它包含很多菜单项(带有命令ID)。菜单条目的数量以及结构在运行时期间动态变化。这意味着我必须不时地动态创建控件和分配新ID。
到目前为止,我所做的是保留大量静态ID,并按顺序分配它们。即使范围非常大,我恐怕最终还是没有ID。我不能在开始时重新开始,因为我不知道之前分配了哪些ID。
我的第一个想法是在当前资源句柄中找到最大的命令ID并从那里开始。但我不知道如何做到这一点。
或者有更好的方法来管理它吗?我想我可能不是第一个遇到这种问题的人。
答案 0 :(得分:0)
嗯。用完ID不太可能。您可以从WM_USER开始,每次使用1增加ID。但是如果您真的认为可以用完ID,那么您可以使用堆栈或列表保留已使用的ID,并在下次需要ID时重复使用它们。处理完消息后,使用push(ID)方法将ID添加到堆栈中(可以使用MFC中的ON_MESSAGE宏的LPARAM传递ID)。然后,当您需要一个新的ID时,首先检查ID堆栈是否为空,如果没有,请使用pop()获取最高ID。仅当ID堆栈为空时,才使用范围ID中的最后一个可用。