CMFCMenuButton с программно построенным меню?

Я новичок в элементе управления MFCMenuButton; вот мой код в OnInitiDialog ():

// Load application list into menu button
m_ApplicationMenu = CreateMenu();
m_MenuInfoSize = 2;
m_MenuInfo = new MENUITEMINFO[m_MenuInfoSize];
memset(m_MenuInfo, 0, sizeof(MENUITEMINFO) * m_MenuInfoSize);
UINT menuIndex = 0;
BOOL b;
// 1st menu item
memset(m_MenuInfo + menuIndex, 0, sizeof(MENUITEMINFO));
m_MenuInfo[menuIndex].cbSize = sizeof(MENUITEMINFO);
m_MenuInfo[menuIndex].fMask = MIIM_ID | MIIM_STRING | MIIM_DATA;
m_MenuInfo[menuIndex].wID = menuIndex;
m_MenuInfo[menuIndex].dwTypeData = new WCHAR[10];
swprintf_s(m_MenuInfo[menuIndex].dwTypeData, 10, L"%s", L"A1");
m_MenuInfo[menuIndex].cch = wcslen(m_MenuInfo[menuIndex].dwTypeData) + 1;
b = InsertMenuItem(m_ApplicationMenu, menuIndex, TRUE, &(m_MenuInfo[menuIndex]));
menuIndex++;
// 2nd menu item
memset(&m_MenuInfo[menuIndex], 0, sizeof(MENUITEMINFO));
m_MenuInfo[menuIndex].cbSize = sizeof(MENUITEMINFO);
m_MenuInfo[menuIndex].fMask = MIIM_ID | MIIM_STRING | MIIM_DATA;
m_MenuInfo[menuIndex].wID = menuIndex;
m_MenuInfo[menuIndex].dwTypeData = new WCHAR[10];
swprintf_s(m_MenuInfo[menuIndex].dwTypeData, 10, L"%s", L"B2");
m_MenuInfo[menuIndex].cch = wcslen(m_MenuInfo[menuIndex].dwTypeData) + 1;
b = InsertMenuItem(m_ApplicationMenu, menuIndex, TRUE,  &(m_MenuInfo[menuIndex]));
menuIndex++;
// Attach menu to CMFCMenuButton
m_ApplicationList.m_bOSMenu = TRUE;
m_ApplicationList.m_bRightArrow = FALSE;
m_ApplicationList.m_bStayPressed = TRUE;
m_ApplicationList.m_bDefaultClick = FALSE;
m_ApplicationList.m_hMenu = m_ApplicationMenu;
// Testing the constructed menu with the dialog's menu bar
::SetMenu(this->m_hWnd, m_ApplicationMenu);

Когда я запустил приложение, CMFCMenuButton отображал выпадающее меню, когда я щелкал по нему … но эти два элемента были пустыми, без текста и изображения.

Я добавил последнюю строку для проверки моего построенного меню; и эти два пункта правильно отобразились в строке меню.

Я также попытался использовать меню, созданное из редактора ресурсов. Он хорошо отображался в строке меню, но в CMFCMenuButton снова были пустые места.

Что я упустил?

0

Решение

Пытаться

m_ApplicationMenu = CreatePopupMenu();

Кроме того, вам лучше использовать 1 в качестве первого menuIndex, если вы хотите получить m_nMenuResult CMFCMenuButton в событии click. Так как:

CMFCMenuButton :: m_nMenuResult

Целое число, которое указывает, какой элемент пользователь выбирает во всплывающем меню.

Значение этой переменной-члена равно нулю, если пользователь отменяет меню
без выбора или при возникновении ошибки.

1

Другие решения

Других решений пока нет …