Как добавить подменю к CMenu в MFC?
Вопрос
У меня есть приложение MFC, которое использует CMenu для строки главного меню.
Мне не удалось успешно создать подменю.
У меня может быть первый уровень файлов, Редактирования, просмотра и т.д. и их подменю, но я не могу создать подменю из одного из этих меню.
Например, я хотел бы иметь возможность перейти Файл-> Последние элементы->список элементов в подменю
Я могу сделать это достаточно легко с помощью редактора ресурсов в VS, но это должно выполняться динамически.
Использую ли я правильный класс в CMenu?Есть какие-нибудь предложения о том, что попробовать?
Я не нашел ни одного приличного учебного пособия.Даже указать мне на правильный вариант было бы полезно.
Решение
Используйте свой редактор ресурсов, чтобы добавить подменю, содержащее один элемент-заполнитель.Затем вы можете программно получить ссылку на это подменю, добавить в него элементы и удалить элемент-заполнитель:
CMenu *subMenu = mainMenu.GetSubMenu( menuPosition );
if( subMenu )
{
for( unsigned i = 0; i < stringArray.size(); i++ )
{
subMenu->AppendMenu( MF_STRING, 400 + i, stringArray[i]);
}
subMenu->DeleteMenu( ID_SUBMENU_PLACEHOLDER, MF_BYCOMMAND );
}
Другие советы
Мне пришлось сделать то же самое сегодня, я на VS2008 с пакетом функций (новый пользовательский интерфейс) и просматривал образцы, и там есть пример того, как динамически добавлять пункты меню (http://msdn.microsoft.com/en-us/library/bb983167.aspx)
Вам необходимо переопределить метод CFrameWndEx::OnShowPopupMenu.
Макс.