Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsiyi.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
188.29 Кб
Скачать

Idi_icon1 icon "calculator.Ico"

DIAL1 DIALOG 0, 0, 240, 120

STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX

CAPTION "Приклад діалогового вікна"

FONT 10, "Arial"

{

}

STRINGTABLE

{

STR1, "Повідомлення"

STR2, "Версія программи 1.00"

}

MENUP ACCELERATORS

{

Vk_f5, 4, virtkey, alt

}

;сегмент даних

_DATA SEGMENT DWORD PUBLIC USE32 'DATA'

NEWHWND DD 0

MSG MSGSTRUCT <?>

WC WNDCLASS <?>

RC RECT <?>

PNT PAINTSTR <?>

pPoint POINT <?>

HINST DD 0 ;дескриптор додатку

TITLENAME DB 'Малюнки', 0

CLASSNAME DB 'CLASS32', 0

CAP DB 'Повідомлення', 0

MES1 DB 'Ви натиснули ліву кнопку мишки', 0

MES2 DB 'Вихід з програми', 0

HDC DWORD ?

MEMDC DWORD ?

YM DWORD ?

Xm dword ?

P DWORD 0

Xp dword ?

YP DWORD ?

HBMP DWORD ?

BUF1 DB 200 dup (?)

BUF2 DB 200 dup (?)

PA DB 'DIAL1',0

PMENU DB "MENUP",0

_DATA ENDS

;---------------------------------------------------------

; сегмент коду

_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'

START:

;отримати дескриптор додатку

PUSH 0

CALL GetModuleHandleA@4

MOV [HINST], EAX

;------------------------

PUSH 40

PUSH OFFSET BUF1

PUSH 11

PUSH [HINST]

CALL LoadStringA@16

;------------------------

PUSH 40

PUSH OFFSET BUF2

PUSH 12

PUSH [HINST]

CALL LoadStringA@16

;------------------------ створення діалогового вікна

;Загружаємо акселератор

PUSH OFFSET PMENU

PUSH [HINST]

CALL LoadAcceleratorsA@8

MOV ACC,EAX ;запам'ятати декстриптор таблиці

;створити немодальний діалог

PUSH 0

PUSH OFFSET WNDPROC

PUSH 0

PUSH OFFSET PA

PUSH [HINST]

CALL CreateDialogParamA@20

;візуалювати немодальний діалог

MOV NEWHWND,EAX

PUSH 1 ;SW_SHOWNORMAL

PUSH [NEWHWND]

CALL ShowWindow@8 ;показати створене вікно

;обробка повідомлень

MSG_LOOP:

PUSH 0

PUSH 0

PUSH 0

PUSH OFFSET MSG

CALL GetMessageA@16

CMP EAX, 0

JE END_LOOP

;транслювати повідомлення акселератора

PUSH OFFSET MSG

PUSH [ACC]

PUSH [NEWHWND]

CALL TranslateAcceleratorA@12

CMP EAX, 0

JNE MSG_LOOP

PUSH OFFSET MSG

CALL TranslateMessage@4

PUSH OFFSET MSG

CALL DispatchMessageA@4

JMP MSG_LOOP

END_LOOP:

PUSH 0

CALL ExitProcess@4

;------------------------------------------------------------

; процедура вікна

; розташування параметрів у стеку

; [EBP+14H] LPARAM

; [EBP+10H] WPARAM

; [EBP+0CH] MES

; [EBP+8Н] HWND

WNDPROC PROC

PUSH EBP

MOV EBP, ESP

PUSH EBX

PUSH ESI

PUSH EDI

CMP DWORD PTR [EBP+0CH],WM_CLOSE

JNE L1

;закрити діалогове вікно

JMP L5

L1:

CMP DWORD PTR [EBP+0CH],WM_INITDIALOG

JNE L2

;загрузка піктограми

PUSH 100

PUSH [HINST]

CALL LoadIconA@8

PUSH EAX

PUSH 0

PUSH WM_SETICON

PUSH DWORD PTR [EBP+08H]

CALL SendMessageA@16

;загрузити меню

PUSH OFFSET PMENU

PUSH [HINST]

CALL LoadMenuA@8

;встановлення меню

PUSH EAX

PUSH DWORD PTR [EBP+08H]

CALL SetMenu@8

;------------------------

MOV EAX,1

JMP FIN

L2:

;перевірка дій з елементами діалогового вікна

;в даному випадку - це меню

CMP DWORD PTR [EBP+0CH],WM_COMMAND

JNE FINISH

;перевірка ідентифікатора пункта меню

CMP WORD PTR [EBP+10H],4

JNE L3

;повідомлення

PUSH 0 ;МВ_ОК

PUSH OFFSET BUF2

PUSH OFFSET BUF1

PUSH 0

CALL MessageBoxA@16

L3:

;перевірка ідентифікатора пункта меню

CMP WORD PTR [EBP+10H],9

JNE FINISH

JMP L5

;закрити діаогове немодальне вікно

L5:

PUSH DWORD PTR [EBP+08H]

CALL DestroyWindow@4

FINISH:

MOV EAX,0

FIN:

POP EDI

POP ESI

POP EBX

POP EBP

RET 16

WNDPROC ENDP

_TEXT ENDS

END START

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]