У меня есть элемент управления MFC, похожий на меню, в котором размещается много пунктов меню (с идентификаторами команд). Количество пунктов меню, а также структура динамически изменяются во время выполнения. Это означает, что мне нужно время от времени создавать элементы управления и динамически назначать новые идентификаторы.
Пока что я зарезервировал большой статический диапазон идентификаторов и назначил их последовательно. Несмотря на то, что диапазон довольно большой, я боюсь, что окажусь в точке, где не осталось идентификаторов. Я не могу начать сначала, потому что я не знаю, какие из ранее назначенных идентификаторов были освобождены.
Моей первой мыслью было найти самый большой идентификатор команды в текущем дескрипторе ресурса и начать с него. Но я не знаю, как этого добиться.
Или есть лучший способ справиться с этим? Я думаю, что я, возможно, не первый человек с такой проблемой.
Хм. Не очень возможно исчерпать идентификаторы. Вы можете начать с WM_USER и увеличивать ID каждый раз на 1. Но если вы действительно думаете, что у вас могут быть исчерпаны идентификаторы, то вы можете использовать стек или список, сохраняя уже использованные идентификаторы, и использовать их в следующий раз, когда вам понадобится идентификатор. Когда вы закончите обработку сообщения, добавьте идентификатор в стек методом push (ID) (вы можете передать идентификатор с помощью LPARAM макроса ON_MESSAGE в MFC). Затем, когда вам нужен новый идентификатор, сначала проверьте, пуст ли стек идентификаторов, если нет, возьмите верхний идентификатор с помощью pop (). Только если стек идентификаторов пуст, используйте последний доступный идентификатор диапазона.