Главная | Обратная связь
МегаЛекции

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- 2020 megalektsii.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.