|
|
|||
|
wm-help.net -> Электронная библиотека -> Разное -> Assembler для Windows ->
Меню можно создать динамически, без создания ресурса.
push offset MenuTemplate ;шаблон меню
call LoadMenuIndirectA
mov [hMenu], eax ;hMenu - menu handle
Шаблон меню состоит из заголовка и списка пунктов меню.
MENUEX_TEMPLATE_HEADER struct
wVersion dw ?
wOffset dw ?
dwHelpId dd ?
MENUEX_TEMPLATE_HEADER ends
wVersion - версия шаблона, должна быть равна 1.wOffset - смещение относительно конца этого поля. Если первое определение пункта меню следует за dwHelpId, то wOffset должен быть 4. dwHelpId - идентификатор подсказки. Заголовок должен выравниваться по DWORD границе. Пункт меню:
typedef struct {
DWORD dwType;
DWORD dwState;
UINT uId;
WORD bResInfo;
WCHAR szText[1];
// DWORD dwHelpId;
} MENUEX_TEMPLATE_ITEM;
dwType - тип пункта меню.dwState - состояние пункта меню. UINT - уникальный идентификатор. bResInfo - величина введенная для обозначения последнего пункта меню, подменю... szText - текст пункта меню. Это Unicode строка оканчивающаяся 0, выравнивается по WORD границе. dwHelpId - идентификатор подсказки. Нужен только при создании POPUP меню. Пример:
MenuTemplate MENUEX_TEMPLATE_HEADER<1,4,0>
; &File
dd MFT_STRING ; Type
dd MFS_ENABLED ; State
dd 0 ; Id
dw MFR_POPUP ; ResInfo
dw '&','F','i','l','e',0,0 ; Text
dd 0 ; HelpId
; MenuItem &GRAYED
dd MFT_STRING ; Type
dd MFS_GRAYED ; State
dd IDM_1 ; Id
dw 0 ; ResInfo
dw 'M','e','n','u','I','t','e','m',' ' ; Text
dw '&','G','R','A','Y','E','D',0
; dd 0 - HelpId only with popup menu
; MenuItem &DISABLED
dd MFT_STRING ; Type
dd MF_DISABLED ; State
dd IDM_2 ; Id
dw 0 ; ResInfo
dw 'M','e','n','u','I','t','e','m',' ' ; Text
dw '&','D','I','S','A','B','L','E','D',0
; dd 0 ; HelpId
; ------------------
dd MFT_SEPARATOR,0,0
dw 0,0
; E&xit
dd MFT_STRING ; Type
dd MFS_ENABLED ; State
dd IDM_EXIT ; Id
dw MFR_END ; ResInfo
dw 'E','&','x','i','t',0,0 ; Text
; dd 0 ; HelpId
; &About
dd MFT_STRING ; Type
dd MFS_ENABLED ; State
dd IDM_ABOUT ; Id
dw MFR_END ; ResInfo
dw '&','A','b','o','u','t',0 ; Text
; dd 0 ; HelpId
Полный текст: cr_menu3.zip
|
|
| бодибилдинг | Строим Домик | RU-домены за 170 рублей | При перепечатке любого материала видимая ссылка на источник "В помощь Веб-Мастеру" и все имена, ссылки авторов обязательны! Время генерации страницы: 0.052 |