Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...