Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Rik_ekb

затруднения с InsertMenuItemA

07.02.2013, 22:20. Показов 1485. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста разобраться со структурой MenuItemInfo
Вообщем в моей программке пункты меню добавлены функцией AppendMenu. Мне бы хотелось один из пунктов (любой) сделать с помощью функции InsertMenuItemA, но затрудняюсь
В win32.inc я структуру описал.
Компилирую в ТАСМ5.
структура
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
MENUITEMINFOA struc
  cbSize        dd      ?
  fMask         dd      ?
  fType         dd      ?
  fState        dd      ?
  wID           dd      ?
  hSubMenu      dd      ?
  hbmpChecked   dd     ?
  hbmpUnchecked dd      ?
  dwItemData    dd      ?
  dwTypeData    dd      ?
  cch           dd      ?
MENUITEMINFOA ends
сам код программки
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
p386
jumps
model flat,STDCALL
include win32.inc           
L equ <LARGE>
IDM_QUIT    equ 100
IDM_ABOUT   equ 101
MF_ENABLED  equ 0
MF_POPUP    equ 10h
MF_OWNERDRAW    equ 100h
extrn            BeginPaint:PROC
extrn            CreateWindowExA:PROC
extrn            DefWindowProcA:PROC
extrn            DispatchMessageA:PROC
extrn            EndPaint:PROC
extrn            ExitProcess:PROC
extrn            GetMessageA:PROC
extrn            GetModuleHandleA:PROC
extrn            LoadCursorA:PROC
extrn            LoadIconA:PROC
extrn            RegisterClassA:PROC
extrn        PostQuitMessage:PROC
extrn            ShowWindow:PROC
extrn            TranslateMessage:PROC
extrn        UpdateWindow:PROC
extrn        CreateMenu:PROC
extrn        MessageBoxA:PROC
extrn        AppendMenuA:PROC
extrn        DrawMenuBar:PROC
extrn        CreatePopupMenu:PROC
extrn        TrackPopupMenu:PROC
extrn        InsertMenuItemA:PROC
.data
newhwnd          dd 0
lppaint          PAINTSTRUCT <?>
msg              MSGSTRUCT   <?>
wc               WNDCLASS    <?>
hInst            dd 0
fl       dw 0
szTitleName      db 'Это наше окно',0
szClassName      db 'ASMCLASS32',0
szHello      db 'пустое!',0
szAppName    db 'окошечко',0
hMenu        dd 0
hsubmenu    dd  0
item1       db 'Меню',0
item2       db 'Выход',0
item3       db 'кноПка',0
mii     MENUITEMINFOA    <?>
 
.code
start:
        push    L 0
        call    GetModuleHandleA
        mov     [hInst], eax
        mov     [wc.clsStyle], CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS
        mov     [wc.clsLpfnWndProc], offset WndProc
        mov     [wc.clsCbClsExtra], 0
        mov     [wc.clsCbWndExtra], 0
        mov     eax, [hInst]
        mov     [wc.clsHInstance], eax
        push    L IDI_APPLICATION
        push    L 0
        call    LoadIconA
        mov     [wc.clsHIcon], eax
        push    L IDC_ARROW
        push    L 0
        call    LoadCursorA
        mov     [wc.clsHCursor], eax
        mov     [wc.clsHbrBackground], COLOR_WINDOW + 1
        mov     dword ptr [wc.clsLpszMenuName],0 
        mov     dword ptr [wc.clsLpszClassName], offset szClassName
        push    offset wc
        call    RegisterClassA
    call    CreateMenu
    mov [hMenu],eax
        push    L 0                         
        push    [hInst]                         
        push    eax;[hMenu]                     
        push    L 0                             
        push    L CW_USEDEFAULT             
        push    L CW_USEDEFAULT         
        push    L CW_USEDEFAULT          
        push    L CW_USEDEFAULT          
        push    L WS_OVERLAPPEDWINDOW;+WS_SYSMENU    
        push    offset szTitleName          
        push    offset szClassName          
        push    L 0                     
 
        call    CreateWindowExA
    mov     [newhwnd], eax
    call    CreatePopupMenu
    mov [hsubmenu],eax
        
    call    AppendMenuA,eax,0,L IDM_QUIT,offset item2
    call    AppendMenuA,[hsubmenu],0,L IDM_ABOUT,offset item3
    call    AppendMenuA,[hMenu],MF_POPUP,[hsubmenu],offset item1
        nop
 
    push    L SW_SHOWNORMAL
        push    [newhwnd]
        call    ShowWindow
 
        push    [newhwnd]
            call    UpdateWindow
 
    push    [newhwnd]
    call    DrawMenuBar
    nop
msg_loop:
        push    L 0
        push    L 0
        push    L 0
        push    offset msg
        call    GetMessageA
        cmp     ax, 0
        je      end_loop
        push    offset msg
        call    TranslateMessage
        push    offset msg
        call    DispatchMessageA
        jmp     msg_loop
end_loop:
        push    [msg.msWPARAM]
        call    ExitProcess
WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,\
                 wparam:DWORD, lparam:DWORD
        LOCAL   hDC:DWORD
 
        cmp     [wmsg], WM_DESTROY
        je      wmdestroy
        cmp     [wmsg], WM_SIZE
        je      wmsize
        cmp     [wmsg], WM_CREATE
        je      wmcreate
        cmp     [wmsg],WM_PAINT
        je      wmpaint
    
;**************************************
    cmp [wmsg],WM_COMMAND
    je  wmcommand
;**************************************
        jmp     defwndproc
 
wmcommand:
    mov eax,lparam
    cmp ax,0
    jne m1
    mov eax,wparam
    cmp ax,IDM_ABOUT
    jne m2
    call    MessageBoxA,0,offset szHello,offset szAppName,MB_OK
    jmp m1
m2: cmp ax,IDM_QUIT
    jne m1
    call    PostQuitMessage,0
m1: mov eax,0
    jmp finish
wmcreate:
        mov     eax, 0
        jmp     finish
 
defwndproc:
        call DefWindowProcA,[hwnd],[wmsg],[wparam],[lparam]
        jmp     finish
 
wmdestroy:
    push    L   0
    call    PostQuitMessage
    mov     eax, 0
        jmp     finish
 
wmsize:
        mov     eax, 0
        jmp     finish
 
wmpaint:
        call    BeginPaint,[hwnd],offset  lppaint
        mov     [hDC],eax
        call    EndPaint,[hwnd],offset lppaint
        mov     eax,0
        jmp     finish
    
finish:
        ret
WndProc          endp
public WndProc
end start
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2013, 22:20
Ответы с готовыми решениями:

Затруднения в C++
Так и не смог разобраться что означает в C++ -&gt;. Т.е. ну вот есть пример из статьи про STM32 GPIOG-&gt;BSSR = 0x0001; что от куда и...

Затруднения с структурой КС
Здравствуйте! Работаю в Cisco Packet Tracer. Существует примерная структурная схема компьютерной сети, состоящей из VoIP-сегмента, обычной...

Затруднения с кодировкой
Есть скрипт php, которым я в базе данных сохраняю текст через обычную форму. Проблема в том, что при входе в phpmyadmin вместо русского...

6
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
08.02.2013, 06:54
Rik_ekb, стиль написания один в один с korg.eg, вывод:
  • или это один и тот же человек,
  • или за основу обучения взята книга одного и того же автора,
  • или один и тот же ВУЗ
программное создание меню
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
.586p
.model tiny
include windows.inc
;for WinXP - 872 bytes
.code
exebase     equ 400000h
ZZZ_TEST    equ 0
ZZZ_OPEN    equ 1
ZZZ_SAVE    equ 2
ZZZ_EXIT    equ 3
 
main:
include capito.asm
;---------------------------------------------------------
start:  xor ebx,ebx
    mov esi,exebase
    mov edi,offset wTitle+exebase
;------------------------------
; registering the window class 
;------------------------------
    invoke RegisterClass,esp,ebx,offset window_procedure+\
    exebase,ebx,ebx,esi,ebx,10011h,COLOR_WINDOW+1,ebx,edi
;--------------------------+
; creating the main window |
;--------------------------+
    push ebx
    push esi
    shl esi,9
    invoke CreateWindowEx,ebx,edi,edi,WS_OVERLAPPEDWINDOW \
    or WS_VISIBLE,esi,esi,esi,esi,ebx,ebx
    push eax;сохраним hWnd в стеке
    invoke CreatePopupMenu
    xchg edi,eax;mov edi,eax;    mov hPopupMenu,eax
    lea esi,AppendMenu+exebase
    push 5
    pop ebp;ebp=5
    push offset menu_exit1+exebase
    push ZZZ_EXIT
    push ebx
    push ebx
    push offset menu_save1+exebase
    push ZZZ_SAVE
    push offset menu_open1+exebase
    push ZZZ_OPEN
    push offset menu_test1+exebase
    push ebx
@@: push ebx
    push edi;hPopupMenu
    call dword ptr [esi];AppendMenu
    dec ebp
    jnz @b
    invoke CreateMenu,MF_POPUP,edi,offset menu_file+exebase
    xchg edi,eax;mov edi,hMenu
    push edi;hMenu
    call dword ptr [esi];AppendMenu
    push offset menu_exit1+exebase
    push ZZZ_EXIT
    push ebx
    push edi;hMenu
    call dword ptr [esi];AppendMenu
    pop eax;возвращаем hWnd
    invoke SetMenu,eax,edi
    mov ebp,esp
;---------------------------+
; entering the message loop |
;---------------------------+
message_loop: invoke GetMessage,ebp,ebx,ebx,ebx
    invoke DispatchMessage,ebp
    jmp message_loop
;----------------------+
; the window procedure |
;----------------------+
window_procedure:
hWnd    equ esp+4
uMsg    equ esp+8
wParam  equ esp+0Ch
    mov eax,[uMsg]
    dec eax
    dec eax; cmp uMsg,WM_DESTROY
    je @@WM_DESTROY
    sub eax,WM_COMMAND-WM_DESTROY; cmp uMsg,WM_PAINT
    je @@WM_COMMAND
    jmp DefWindowProc+exebase
@@WM_COMMAND: mov ebx,[wParam]
    cmp ebx,ZZZ_EXIT
    je @@WM_DESTROY;menu_exit
    invoke MessageBox,dword ptr [hWnd+12],menu_handlers[ebx*4]+exebase,\
    offset menu_name+exebase,eax 
    retn 10h
@@WM_DESTROY: invoke ExitProcess,ebx
;--------------------------------------------------------------------
menu_file  db '&File',0
menu_test1 db '&Test',0
menu_open1 db '&Open',0
menu_save1 db '&Save',0
menu_exit1 db 'E&xit',0
menu_name db 'ZZZ_Menu',0
test_msg  db 'You select menu item TEST',0
open_msg  db 'You select menu item OPEN',0
save_msg  db 'You select menu item SAVE',0
menu_handlers dd test_msg+exebase, open_msg+exebase, save_msg+exebase
wTitle db 'Iczelion Tutorial #8-4:Программное создание меню в MASM'
;----------------------------------------------------------------
import:
dd 0,0,0,user32_dll
dd user32_table
dd 0,0,0,kernel32_dll
dd kernel32_table
dd 0,0
kernel32_table:
ExitProcess             dd _ExitProcess,0
user32_table:
RegisterClass       dd _RegisterClass
CreateWindowEx          dd _CreateWindowEx
GetMessage              dd _GetMessage
DispatchMessage         dd _DispatchMessage
DefWindowProc           dd _DefWindowProc
CreateMenu      dd _CreateMenu
CreatePopupMenu     dd _CreatePopupMenu
AppendMenu      dd _AppendMenu
SetMenu         dd _SetMenu
MessageBox      dd _MessageBox
                        dw 0
_RegisterClass      db 0,0,'RegisterClass'      
_CreateWindowEx     db 'A',0,'CreateWindowEx'
_GetMessage     db 'A',0,'GetMessage'
_DispatchMessage    db 'A',0,'DispatchMessage'
_DefWindowProc      db 'A',0,'DefWindowProc'
_CreateMenu     db 'A',0,'CreateMen'
_CreatePopupMenu    db 'u',0,'CreatePopupMen'
_AppendMenu     db 'u',0,'AppendMenu'
_SetMenu        db 'A',0,"SetMen"
_MessageBox     db 'u',0,"MessageBoxA",0
user32_dll      db 'user3'
 
_ExitProcess        db '2',0,'ExitProcess',0
kernel32_dll        db 'kernel32'
end_import:
end main
подробности смотри здесь "Win32 API. Урок 8 d"
0
0 / 0 / 0
Регистрация: 26.01.2011
Сообщений: 11
08.02.2013, 09:25
Mikl___
Вы попали в точку! Мы с Rik_ekb из одного ВУЗа, из одной группы и более того мы друзья))))
Так что никакого обмана, мы разные люди, но учимся вместе)))
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
08.02.2013, 09:51
korg.eg, никто не уличал вас в обмане, а вот учебник по которому вы занимаетесь Пирогов "Ассемблер для Windows" 2-ое издание, но там он пишет под масм и тасм, а ваш преподаватель адаптировал его под ТАСМ5
0
Rik_ekb
08.02.2013, 10:06
Mikl___, в вашем коде пункты меню так же создаются через AppendMenu на сколько я понял. И в уроке 8d про InsertMenuItem лишь упоминание, что она заменила устаревшую функцию AppendMenu.
ну может я смотрю как то криво и не вижу..
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
08.02.2013, 11:17
Rik_ekb,
скачай masm32, в папке masm32\examples\example03\menudemo есть пример создания меню через использование InsertMenuItem
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
25.02.2013, 07:02
Rik_ekb,
добавил здесь
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2013, 07:02
Помогаю со студенческими работами здесь

Затруднения в топологии
Здравствуйте! Дан план здания, это медицинский центр. &quot;Состоит из 10 врачебных кабинетов и регистратуры&quot;. Но как мы наблюдаем -...

Затруднения в классах
qall Вообщем начал изучать руби порядка двух недель назад, до этого опыта в кодинге как таковом не имел, в начале всё читалось и...

Затруднения с компиляцией
Здравствуйте! Установил RAD XE 8 . Компилю первую программу - выбивает простейшую ошибку, как исправить, самому не доходит. Unable...

Затруднения в программе
Здравствуйте. Когда писала программу столкнулась с вот таким вопросом от преподавателя: float time_max(int n, float *Uvx, float *t) ...

Include затруднения
Добрый вечер! Сразу перейду к описанию проблемы: Есть два класса: один это класс логирования, другой - класс сводная библиотека. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru