Помогите разобраться, не могу добавить Icon к пункту меню "Proba 2" Код (ASM): .386 .model flat,stdcall option casemap:none include C:\masm32\include\windows.inc include C:\masm32\include\user32.inc include C:\masm32\include\kernel32.inc includelib C:\masm32\lib\user32.lib includelib C:\masm32\lib\kernel32.lib IDC_ICON1 = 500 IDC_ICON2 = 501 WndProc proto :DWORD,:DWORD,:DWORD,:DWORD ;include data.inc .data MenuName db 'M',0 szMenuTest1 db "Proba 1",0 szMenuTest2 db "Proba 2",0 .data? hMe dd ? MenuII MENUITEMINFO <> MenuII2 MENUITEMINFO <> .code start: invoke GetModuleHandle, NULL invoke DialogBoxParam, eax, 50, NULL, offset WndProc, NULL WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL t_Po:POINT .if uMsg==WM_CLOSE ex: invoke ExitProcess, NULL .elseif uMsg==WM_COMMAND .if wParam==71 invoke MessageBox, hWnd, 0, 0, 0 .elseif wParam==72 invoke MessageBeep, 0 .elseif wParam==80 .if MenuII.fState==MFS_UNCHECKED mov MenuII.fState, MFS_CHECKED invoke SetMenuItemInfo, hMe, 80, 0, addr MenuII invoke DrawMenuBar, hMe .else mov MenuII.fState, MFS_UNCHECKED invoke SetMenuItemInfo, hMe, 80, 0, addr MenuII invoke DrawMenuBar, hMe .endif .elseif wParam==73 jmp ex .endif .elseif uMsg==WM_INITDIALOG invoke GetModuleHandle, NULL invoke LoadMenu, eax, addr MenuName mov hMe, eax mov MenuII.cbSize, sizeof MENUITEMINFO mov MenuII.fMask, MIIM_STRING OR MIIM_FTYPE OR MIIM_STATE OR MIIM_ID mov MenuII.fType, MFT_STRING mov MenuII.fState, MFS_UNCHECKED ; OR MFS_DISABLED mov MenuII.wID, 80 mov MenuII.hSubMenu, 0 mov MenuII.hbmpChecked, 0 mov MenuII.hbmpUnchecked, 0 mov MenuII.dwItemData, 0 mov MenuII.dwTypeData, offset szMenuTest1 mov MenuII.cch, 7 invoke InsertMenuItem, hMe, 72, 0, addr MenuII invoke GetModuleHandle,0 ;invoke LoadIcon, eax, IDC_ICON1 ;mov hIcon1, eax invoke LoadImage, eax, IDC_ICON2, IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR mov MenuII2.cbSize, sizeof MENUITEMINFO mov MenuII2.fMask, MIIM_STRING + MIIM_FTYPE + MIIM_STATE + MIIM_ID ;+ MIIM_TYPE ;+ MIIM_BITMAP ;+ MIIM_CHECKMARKS mov MenuII2.fType, MFT_STRING ;+ MFT_RADIOCHECK mov MenuII2.fState, MFS_ENABLED ;or MFS_CHECKED ; OR MFS_DISABLED MFS_UNCHECKED mov MenuII2.wID, 81 mov MenuII2.hSubMenu, 0 mov MenuII2.hbmpChecked, 0;eax mov MenuII2.hbmpUnchecked, 0;eax mov MenuII2.dwItemData, 0 mov MenuII2.dwTypeData, offset szMenuTest2 mov MenuII2.cch, 7 ;mov MenuII2.hbmpItem, eax invoke InsertMenuItem, hMe, 72, 0, addr MenuII2 .elseif uMsg==WM_RBUTTONDOWN invoke GetCursorPos, addr t_Po invoke GetSubMenu, hMe, NULL invoke TrackPopupMenu, eax, TPM_LEFTALIGN, t_Po.x, t_Po.y, NULL, hWnd, NULL .elseif mov eax, FALSE ret .endif mov eax, TRUE ret WndProc endp end start Код (Text): #define IDD_DLG1 50 #define M1 71 #define M2 72 #define M3 73 #include "C:/masm32/include/RESOURCE.H" #define IDC_ICON1 500 #define IDC_ICON2 501 IDC_ICON1 ICON "icon1.ico" IDC_ICON2 ICON "icon2.ico" IDD_DLG1 DIALOGEX 6,6,244,134 CAPTION "IDD_DLG" FONT 8,"MS Sans Serif",0,0,0 STYLE WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|DS_CENTER BEGIN END M MENU BEGIN POPUP "A" BEGIN MENUITEM "MessageBox",M1 MENUITEM "MessageBeep",M2 MENUITEM SEPARATOR MENUITEM "Exit",M3 END END
В винапишном меню нет такого функционала, как иконки в пунктах меню. Office-like менюшки надо рисовать самому.
Нет. Вызывается SetMenuItemInfo в последнем параметре передается указатель на структуру MENUITEMINFO, поле hbmpItem задает иконку пункта меню (при установленном флаге MIIM_BITMAP).
хочу уточнить мы об одном и том же говорим? Должно получиться так Я добавляю новый пункт в меню с помощью InsertMenuItem, где в аргументах также имеется структура MENUITEMINFO, разницы с SetMenuItemInfo думаю быть не должно? Или же есть нюансы?
E.N.D., картинка не грузится. Я не вижу в коде установку флага MIIM_BITMAP и заполнение поля hbmpItem хендлом битмапа. UPD: Да я об этом же говорю (картинку глянул через HTML код страницы)
Ещё дополню тему, параметрами hbmpChecked и hbmpUnchecked структуры MENUITEMINFO, можно управлять иконками пунктов меню, к примеру как установить или убрать галочку. Установив параметры MIIM_CHECKMARKS + MIIM_STATE и убрав MIIM_BITMAP и hbmpItem. Может кому пригодится