25,7 → 25,6 |
.size = $ |
end virtual |
|
align 16 |
GenericBox: |
push [cursor_x] |
push [cursor_y] |
50,7 → 49,7 |
dec eax |
jz .key |
sub eax,4 |
jz .mouse |
jz .event ;todo: mouse |
jmp exit |
.redraw: |
call draw_window |
87,7 → 86,7 |
push eax |
push 2 |
push ebx |
call ecx ;DlgProc |
call ecx |
test eax, eax |
jz .event |
mov [esp+28], eax |
140,97 → 139,6 |
.ralt_up: |
and [ctrlstate], not 0x20 |
jmp .event |
align 4 |
.mouse: |
mov eax,SF_MOUSE_GET |
mov ebx,SSF_BUTTON_EXT |
int 0x40 |
bt eax,8 ;left but. down |
jnc .event |
|
mov eax,SF_MOUSE_GET |
mov ebx,SSF_WINDOW_POSITION |
int 0x40 |
cmp ax, word[skinh] |
jl .event |
sub ax, word[skinh] |
xor dx,dx |
mov bx, font_height |
div bx |
movzx edx,ax |
shr eax,16 |
sub eax, 5 ;window border |
|
push edx |
xor dx,dx |
mov bx, font_width |
div bx |
movzx eax,ax |
pop edx |
|
mov ebx, [esp+24h+8] ;DLGTEMPLATE* dlg |
cmp edx, [ebx+dlgtemplate.y] |
jl .event |
cmp eax, [ebx+dlgtemplate.x] |
jl .event |
sub edx, [ebx+dlgtemplate.y] |
sub eax, [ebx+dlgtemplate.x] |
cmp edx, [ebx+dlgtemplate.height] |
jge .event |
cmp eax, [ebx+dlgtemplate.width] |
jge .event |
|
add ebx, dlgtemplate.size+12 |
mov ecx, [ebx-4] |
or ecx, ecx |
jz .event |
|
push ebx ecx |
.m_loop: |
cmp [ebx+dlgitemtemplate.type], 2 ;button |
je .m_comp |
cmp [ebx+dlgitemtemplate.type], 3 ;edit |
je .m_comp |
;cmp [ebx+dlgitemtemplate.type], 5 ;check |
;je .m_comp |
jmp .m_next |
align 4 |
.m_comp: |
cmp [ebx+dlgitemtemplate.x1], eax |
jg .m_next |
cmp [ebx+dlgitemtemplate.y1], edx |
jg .m_next |
cmp [ebx+dlgitemtemplate.x2], eax |
jl .m_next |
cmp [ebx+dlgitemtemplate.y2], edx |
jl .m_next |
|
mov eax, [ebx+dlgitemtemplate.flags] |
and eax, 4 |
jnz .m_old_focus |
mov eax, ebx |
jmp .m_new_focus |
align 4 |
.m_next: |
add ebx, sizeof.DlgBtn |
loop .m_loop |
.m_old_focus: |
pop ecx ebx |
jmp .event |
align 4 |
.m_new_focus: |
pop ecx ebx |
call DlgClearFocus |
or dword[eax+dlgitemtemplate.flags], 4 |
|
sub ebx, dlgtemplate.size+12 |
push ebp |
mov ebp, ebx |
call ManagerDlgProc.dodraw |
pop ebp |
call draw_image |
jmp .event |
align 4 |
.exit: |
popad |
push eax |
245,21 → 153,7 |
popad |
ret 8 |
|
;input: |
; ebx - pointer to first item |
; ecx - count items |
align 4 |
DlgClearFocus: |
push ebx ecx |
@@: |
and byte [ebx+dlgitemtemplate.flags], not 4 |
add ebx, sizeof.DlgBtn |
loop @b |
pop ecx ebx |
ret |
|
; int __stdcall ShowGenericBox(DLGTEMPLATE* dlg, void* DlgProc); |
align 16 |
ShowGenericBox: |
pushad |
mov ebx, [esp+20h+4] |
577,7 → 471,6 |
ret 8 |
|
; void __stdcall HideGenericBox(DLGTEMPLATE* dlg, int bRedrawWindow); |
align 16 |
HideGenericBox: |
; void __stdcall HideDialogBox(DLGDATA* dlg, int bRedrawWindow); |
HideDialogBox: |
1211,65 → 1104,6 |
movzx eax, byte [layout+eax] |
ret |
|
struct DlgLbl |
type dd 1 |
x1 dd ? |
y1 dd ? |
x2 dd ? |
y2 dd ? |
text dd ? |
flags dd ? |
ends |
|
struct DlgBtn |
type dd 2 |
x1 dd ? |
y1 dd ? |
x2 dd ? |
y2 dd ? |
text dd ? |
flags dd ? |
ends |
|
struct DlgEdit |
type dd 3 |
x1 dd ? |
y1 dd ? |
x2 dd ? |
y2 dd ? |
text dd ? |
flags dd ? |
ends |
|
struct DlgLine |
type dd 4 |
x1 dd ? |
y1 dd ? |
x2 dd ? |
y2 dd ? |
dq 0 |
ends |
|
struct DlgCheck |
type dd 5 |
x1 dd ? |
y1 dd ? |
x2 dd ? |
y2 dd ? |
text dd ? |
flags dd ? |
ends |
|
struct DlgList |
type dd 6 |
x1 dd ? |
y1 dd ? |
x2 dd ? |
y2 dd ? |
text dd ? |
flags dd ? |
ends |
|
virtual at 0 |
dlgitemtemplate: |
; «¥¬¥âë: |
1318,7 → 1152,6 |
; DLGITEMTEMPLATE items[]; /* array of dialog items */ |
; } |
; int __stdcall DialogBox(DLGDATA* dlg); |
align 16 |
DialogBox: |
push ManagerDlgProc |
push dword [esp+8] |
1339,7 → 1172,6 |
call DrawGenericBox |
ret 4 |
|
align 16 |
ManagerDlgProc: |
mov ebp, ebx |
mov eax, [esp+8] |
1567,7 → 1399,6 |
inc dword [edx+4] |
@@: jmp .ret_test |
|
align 4 |
.dodraw: |
or [cursor_x], -1 |
or [cursor_y], -1 |
1601,7 → 1432,6 |
draw_functions_num = ($ - draw_functions) / 4 |
endg |
|
align 4 |
draw_static_text: |
; à¨á㥬 áâ â¨ç¥áª¨© ⥪áâ |
mov ah, [dialog_main_color] |
1703,7 → 1533,6 |
.ret2: |
ret |
|
align 4 |
draw_button: |
mov ecx, dialog_colors |
test byte [ebp+dlgtemplate.flags], 2 |
1717,7 → 1546,6 |
@@: |
jmp draw_text |
|
align 4 |
draw_editbox: |
mov edx, [ebx+dlgitemtemplate.data] |
test [ebx+dlgitemtemplate.flags], 4 |
1746,7 → 1574,6 |
add esi, 12 |
jmp draw_text_esi |
|
align 4 |
dlgitem_get_console_ptr: |
mov eax, [ebx+dlgitemtemplate.x1] |
mov edx, [ebx+dlgitemtemplate.y1] |
1755,7 → 1582,6 |
add edx, [ebp+dlgtemplate.y] |
jmp get_console_ptr |
|
align 4 |
draw_h_separator: |
; à¨á㥬 £®à¨§®â «ìë© à §¤¥«¨â¥«ì |
call dlgitem_get_console_ptr |
1777,7 → 1603,6 |
.done: |
ret |
|
align 4 |
draw_checkbox: |
; à¨á㥬 ä« ¦®ª |
call dlgitem_get_console_ptr |
1819,7 → 1644,6 |
.ret: |
ret |
|
align 4 |
draw_listbox: |
; à¨á㥬 ᯨ᮪ |
call dlgitem_get_console_ptr |
1928,7 → 1752,6 |
.noscrollbar: |
ret |
|
align 4 |
listbox_key: |
mov edx, [ebx+dlgitemtemplate.data] |
cmp al, 0x48 |
2091,7 → 1914,6 |
; int __stdcall Message(const char* title, |
; int num_strings, const char* strings[], |
; int num_buttons, const char* buttons[]); |
align 16 |
Message: |
push 1 |
@@: |