- •Idi_application equ 32512
- •Idc_cross equ 32515
- •X word ?
- •Invoke Sleep, 5000
- •X word ?
- •Idi_application equ 32512
- •Idc_cross equ 32515
- •X dword ?
- •Xm dword ?
- •Xp dword ?
- •Idi_icon1 icon "calculator.Ico"
- •Idi_bit1 bitmap "picture1.Bmp"
- •Idi_bit2 bitmap "picture2.Bmp"
- •Idi_icon1 icon "calculator.Ico"
- •Xm dword ?
- •Xp dword ?
- •Idi_icon1 icon "calculator.Ico"
- •Vk_f5, 4, virtkey, alt
- •Xm dword ?
- •Xp dword ?
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
