Динамическое меню с использованием mfc

Вы добавили src/Framework/Resources/Info.plist, когда добавили файлы Facebook SDK в свой проект. Просто удалите его из вашего проекта, и все снова будет работать. Гарантированы! :)

13
задан Werner Henze 27 June 2013 в 22:36
поделиться

1 ответ

Следование примеру, если Вы хотите динамично добавить пункт меню & также присоедините данные к тому пункту меню.

    struct MyStruct
    {
        int abc;
    };
    CMenu MyMenu;
    MyMenu.CreatePopupMenu();

    CMenu MyMainMenu;
    VERIFY(MyMainMenu.LoadMenu(IDR_MAIN_MENU_ID));
    MyMainMenu.InsertMenu(0, MF_POPUP, (UINT_PTR)MyMenu.m_hMenu, _T("Main Menu"));

    const int iMenuAdds = 5;
    for (int i = 0; i < iMenuAdds; ++i)
    {
        MyStruct myStruct;
        myStruct.abc = i+10001;

        CString MenuDesc;
        MenuDesc.Format(_T("MenuNo: %d"), i);
        MENUITEMINFO tmpItem;
        tmpItem.fMask = MIIM_STRING | MIIM_ID | MIIM_DATA;
        tmpItem.fType = MFT_STRING;
        tmpItem.fState = MFS_ENABLED;
        tmpItem.wID = i + 101; //See note 1. below.
        tmpItem.dwItemData = (ULONG_PTR)&myStruct; //data set.
        tmpItem.dwTypeData = MenuDesc.GetBuffer(); //string description
        tmpItem.cch = MenuDesc.GetLength();
        tmpItem.cbSize = sizeof(tmpItem);
        MyMenu.InsertMenuItem(i, (LPMENUITEMINFO)& tmpItem, FALSE);
    }

Для получения пункта меню & связанные данные:

CMenu* pPopup = &MyMenu; //or CMenu* pPopup = MyMainMenu.GetSubMenu(0); depending on parent.
ULONG_PTR lRetVal = pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, point.x, point.y, this, NULL);
//^^lRetVal should return same value as tmpItem.wID above.

MENUITEMINFO tmpItem;
tmpItem.cbSize = sizeof(MENUITEMINFO);
tmpItem.fMask = MIIM_STRING | MIIM_ID | MIIM_DATA;
tmpItem.fType = MFT_STRING;
TCHAR dwTypeData[256];
tmpItem.dwTypeData = dwTypeData;
tmpItem.cch = 256;
pPopup->GetMenuItemInfo(lRetVal, &tmpItem, FALSE);
MyStruct *myStruct = (MyStruct*)tmpItem.dwItemData; //and now we have our data.
  1. Используемый в качестве Вашего #define & может использоваться для ON_COMMAND_RANGE (idFirst, самый неактивный, Функция), так должен был бы все еще иметь своего рода определенный диапазон, если бы Вы были планированием использования ON_COMMAND_RANGE. Кроме того: диапазон команды использования для динамического меню или создают Ваше собственное в наборе данных. Также потребность удостовериться любые используемые диапазоны уже не конфликтует ни с кем #defined пункты меню в том же или родительском меню.

Добавленный выше, поскольку я нашел этот поток от поиска с помощью Google из-за проблемы & я уже использовал принятый метод ответов для добавления пунктов меню.

0
ответ дан 25 October 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: