Страница 1 из 1

Проблема с меню. Помогите кто нибудь.

Добавлено: 11 ноя 2007, 23:23
silvianamateush
Добрый день.
Дело в том что я студентка.
У меня лаба по меню.
Мне надо создать всплывающее меню. В котором рядом с тестом будет находится картинка. Которая должна хранится в ImageList.
Вот кодик.
HBITMAP Bit=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAPA));
imageList=ImageList_Create(16,16,ILC_COLOR32,2,10);
ImageList_Add(imageList,Bit,0);
DeleteObject(hBitmap);
Bit=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAPB));
ImageList_Add(imageList,Bit,0);
DeleteObject(hBitmap);
HMENU hmenu=CreatePopupMenu();
MENUITEMINFO menuInfo;
ZeroMemory(&menuInfo,sizeof(MENUITEMINFO));
IMAGEINFOInfo;
for(int iter=0; iter<2;iter++)
{
ImageList_GetImageInfo(imageList,iter,&Info);
menuInfo.fMask=MIIM_BITMAP|MIIM_STRING| MIIM_DATA|MIIM_ID ;
menuInfo.fType=MFT_BITMAP|MFT_STRING;
menuInfo.cbSize=sizeof(MENUITEMINFO);
menuInfo.wID=i;
menuInfo.fState=MFS_ENABLED;
menuInfo.hbmpItem=imageInfo.hbmImage;
menuInfo.dwTypeData="status";
menuInfo.cch=strlen("status");
InsertMenuItem(hmenu,i,true,&menuInfo);
}
TrackPopupMenu(hmenu,TPM_RIGHTALIGN,TPM_RETURNCMD,0,0,hwndDlg,NULL);
DestroyMenu(hmenu);

Но почемуто кодик не работает. :(
Вернее текст появляется а какртинка нет :(
Помогите пожалуйста блондинке.

Re: Проблема с меню. Помогите кто нибудь.

Добавлено: 12 ноя 2007, 12:47
Eugie
См. MSDN:

The MFT_BITMAP, MFT_SEPARATOR, and MFT_STRING values cannot be combined with one another.
...
MFT_BITMAP is replaced by MIIM_BITMAP and hbmpItem.
...
MFT_STRING is replaced by MIIM_STRING.
Попробуй так:

Код: Выделить всё

    
for(int iter=0; iter<2;iter++)
{
    ImageList_GetImageInfo(imageList,iter,&Info);     
    menuInfo.cbSize=sizeof(MENUITEMINFO);
    [b]menuInfo.fMask=MIIM_BITMAP | MIIM_STRING | MIIM_STATE | MIIM_ID;[/b]
    menuInfo.wID=i;
    menuInfo.fState=MFS_ENABLED;
    menuInfo.hbmpItem=Info.hbmImage;
    menuInfo.dwTypeData="status";
    menuInfo.cch=strlen("status");
    InsertMenuItem(hmenu,i,true,&menuInfo);
}

Re: Проблема с меню. Помогите кто нибудь.

Добавлено: 12 ноя 2007, 22:28
silvianamateush
К сожалению ничего не выходит. :(
Может у кого - то есть рабочий примерчик.
Поделитесь пожалуйста.

Re: Проблема с меню. Помогите кто нибудь.

Добавлено: 13 ноя 2007, 14:06
Eugie
Попробуй так:

Код: Выделить всё

 
   <..>
   menuInfo.hbmpItem=HBMMENU_SYSTEM;
   <..>
Если иконка появится (стандартная иконка Windows), тогда смотри, что получаешь в GetImageInfo. Если нет, попробуй сначала создать текстовое меню, потом с помощью SetMenuItemInfo подключи иконки.

Re: Проблема с меню. Помогите кто нибудь.

Добавлено: 14 ноя 2007, 02:31
silvianamateush
Так вроде картинки теперь показываются.
Но есть одна проблема. У меня картинка 16X16 а показывается только 13X13.
Как это поправить.
Вот невезет с одним разобралась так другое теперь. :confused:

Добавлено: 16 ноя 2007, 17:26
Eugie
Либо используй StretchBlt() чтобы подогнать свои битмапы под стандартный размер (его можно узнать с помощью GetSystemMetrics(), параметры SM_CXMENUCHECK, SM_CYMENUCHECK), либо задавай fType = MFT_OWNERDRAW и рисуй все сама. Как это делается - см. в MSDN, там и примеры есть.