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 31..data ; переопределенное имя, означающее начало сегмента ; данных Newhwnd dd 0 33. lppaint PAINTSTRUCT <?> 34. msg MSGSTRUCT <?> 35. wc WNDCLASS <?> HInst dd 0 Fl dw 0 SzTitleName db ' Это наше окно ',0 SzClassName db 'ASMCLASS32',0 40. szHello db 'Привет!',0 SzAppName db 'Сообщение',0 HMenu dd 0 Hsubmenu dd 0 Item1 db ' Меню ',0 Item2 db ' Выход ',0 Item3 db 'Возврат',0 47. .code ; переопределенное имя, означающее начало ; сегмента кода 48. start: Push L 0 Call GetModuleHandleA 51. mov [hInst], eax ;инициализация структуры WndClass
52. mov [wc.clsStyle], CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS 53. mov [wc.clsLpfnWndProc], offset WndProc 54. mov [wc.clsCbClsExtra], 0 55. mov [wc.clsCbWndExtra], 0 56. mov eax, [hInst] 57. mov [wc.clsHInstance], eax Push L IDI_APPLICATION Push L 0 Call LoadIconA 61. mov [wc.clsHIcon], eax Push L IDC_ARROW Push L 0
Call LoadCursorA 65. mov [wc.clsHCursor], eax 66. mov [wc.clsHbrBackground], COLOR_WINDOW + 1 67. mov dword ptr [wc.clsLpszMenuName],0 68. mov dword ptr [wc.clsLpszClassName], offset szClassName Push offset wc Call RegisterClassA Call CreateMenu 72. mov [hMenu],eax Push L 0 ; lpParam 74. push [hInst] ; hInstance 75. push [hMenu] ; menu Push L 0 ; parent hwnd Push L CW_USEDEFAULT ; height Push L CW_USEDEFAULT ; width Push L CW_USEDEFAULT ; y Push L CW_USEDEFAULT ; x Push L WS_OVERLAPPEDWINDOW; Style Push offset szTitleName ; Title string Push offset szClassName ; Class name Push L 0 ; extra style Call CreateWindowExA 86. mov [newhwnd], eax Call CreatePopupMenu 88. mov [hsubmenu], eax Push offset item2 Push L IDM_QUIT Push 0 Push eax Call AppendMenuA Push offset item3 Push L IDM_ABOUT Push 0 97. push [hsubmenu];eax Call AppendMenuA Push offset item1 100. push [hsubmenu] Push MF_POPUP 102. push [hMenu] Call AppendMenuA Nop Push L SW_SHOWNORMAL 106. push [newhwnd] Call ShowWindow 108. push [newhwnd] Call UpdateWindow 110. push [newhwnd] Call DrawMenuBar 112. 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 125. end_loop: 126. push [msg.msWPARAM] Call ExitProcess 128.;---- Оконная процедура ---- 129. WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,\ Wparam:DWORD, lparam:DWORD LOCAL hDC:DWORD 132. cmp [wmsg], WM_DESTROY Je wmdestroy 134. cmp [wmsg], WM_SIZE Je wmsize 136. cmp [wmsg], WM_CREATE Je wmcreate 138. cmp [wmsg],WM_PAINT Je wmpaint 140.;************************************** 141. cmp [wmsg],WM_COMMAND Je wmcommand 143.;************************************** Jmp defwndproc 145. 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 Push 0 Call PostQuitMessage M1: mov eax,0 Jmp finish 160. wmcreate: Mov eax, 0 Jmp finish 163. defwndproc: 164. push [lparam] 165. push [wparam] 166. push [wmsg] 167. push [hwnd] Call DefWindowProcA
Jmp finish 170. wmdestroy: Push L 0 Call PostQuitMessage Mov eax, 0 Jmp finish 175. wmsize: Mov eax, 0 Jmp finish 178. wmpaint: Push offset lppaint 180. push [hwnd] Call BeginPaint 182. mov [hDC],eax Push offset lppaint 184. push [hwnd] Call EndPaint Mov eax,0 Jmp finish 188. finish: Ret WndProc endp 191.;--------------------------------- Public WndProc 193. end start ; конец программы рис1. Окно программы Заключение
Моя задача состояла в создании программы без файла описания ресурсов с помощью функций CreateMenu и CreatePopupMenu. Это приложение не выполняет никакой полезной работы и служит для демонстрации некоторых возможностей системы в организации интерфейса пользователя. Библиографический список 1. Зубков С.В. Assembler. Для DOS Windows и Unix. М.: ДМК, 1999 2. Пустоваров В.И. АССЕМБЛЕР. Программирование и анализ корректности машинных программ. 3. Применение TURBO ASSEMBLER для программирования ПЭВМ. Часть1,2.: Методические указания к лабораторному практикуму по дисциплине: «Системное программное обеспечение» / Составитель В.П.Кулюкин. Екатеринбург: изд. ИПК УГТУ, 2000.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|