Создать растровое изображение в MENUITEMINFO Не загружать растровое изображение - PullRequest
0 голосов
/ 19 февраля 2019

Программа не может даже загрузить раскрывающийся список сейчас, когда добавлен hbmpItem.Любые идеи, как я могу добавить небольшой растровое изображение в мое меню?Удалите элементы из кода, чтобы очистить его для этого вопроса.

Пошаговое выполнение программы показывает, что в памяти нет ничего для растровых переменных, что для меня означает, что ее не удалось загрузить.Пути верны.

ОБНОВЛЕНИЕ: Ответ см. Ниже.

               MENUITEMINFO mii;

                memset(&mii, 0, sizeof(mii));
                mii.cbSize = sizeof(mii);
                mii.fMask = MIIM_BITMAP; //| MIIM_BITMAP;
                mii.fType = MFT_BITMAP;
                mii.dwTypeData = const_cast<char*>(pMenuRec->GetName());
                mii.cch = strlen(pMenuRec->GetName());
                mii.wID = pMenuRec->GetID();
                mii.hbmpItem = image;      // hBMP;  // need to add bitmap handle
                mii.dwItemData = reinterpret_cast<unsigned long>(pMenuRec->GetName());
                InsertMenuItem(hMenu, pMenuRec->GetID(), FALSE, &mii);


                memset(&mii,0,sizeof(mii));
                mii.cbSize     = sizeof(mii);
                mii.fMask = MIIM_TYPE | MIIM_DATA | MIIM_ID; //| MIIM_BITMAP;
                mii.fType = MFT_STRING;
                mii.dwTypeData = const_cast<char*>(pMenuRec->GetName());
                mii.cch        = strlen(pMenuRec->GetName());
                mii.wID        = pMenuRec->GetID();
                //mii.hbmpItem =  image;      // hBMP;  // need to add bitmap handle
                mii.dwItemData = reinterpret_cast<unsigned long>(pMenuRec->GetName());

                InsertMenuItem(hMenu,pMenuRec->GetID(),FALSE,&mii);

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Таким образом, изображение и текст не допускаются.SO проверенный и непроверенный использовался, добавляя fmask

                memset(&mii,0,sizeof(mii));
                mii.cbSize     = sizeof(mii);
                mii.fMask = MIIM_TYPE | MIIM_SUBMENU | MIIM_DATA | MIIM_ID | MIIM_CHECKMARKS; // Add checkmarks;
                mii.fType = MFT_STRING;
                mii.dwTypeData = const_cast<char*>(pMenuRec->GetName());
                mii.cch        = strlen(pMenuRec->GetName());
                mii.wID        = pMenuRec->GetID();
                mii.hbmpChecked = image;
                mii.hbmpUnchecked = image;
                mii.dwItemData = reinterpret_cast<unsigned long>(pMenuRec->GetName());
                InsertMenuItem(hMenu, pMenuRec->GetID(), FALSE, &mii);`
0 голосов
/ 19 февраля 2019

Легкую ошибку сделать "C:\mybitmap.bmp" должно быть "C:\\mybitmap.bmp".Помните, что обратная косая черта - это escape-символ в строковых литералах. Если вам нужна обратная косая черта в строковом литерале, вы должны удвоить его.

Также стоит отметить, что большинство функций отлично работают с косыми чертами в Windows.Таким образом, вы можете изменить обратную косую черту на обратную.

Кстати, в вашем коде, почему вы загружаете растровое изображение дважды?

...