Пользователь
Регистрация: 10.12.2011
Сообщений: 26
|
FASM файл ресурсов
Здраствуйте. Хотелось бы получить помощь (подсказку, ссылку) вот по какому поводу. Имею непреодолимое желание разместить в файле ресурсов два (в перспективе и больше) диалоговых окна. Однако совершенно в этом вопросе не образован, а Яндекс секретом не делится. Проблема, как мне думается в синтаксисе. Окна в лучшем случае отображаются по одному, второе окно прогой просто игнорируется. В худшем игнорируются оба.
Привожу код программы
Код:
format PE64 GUI 5.0
entry Start
include 'win64a.inc'
DWIN1 = 100 ; Диалоговое окно 1
DWIN2 = 200 ; Диалоговое окно 2
KEY_OK = 300 ; Кнопка ОК
section '.text' code readable executable
Start:
sub rsp, 8 ; Make stack dqword aligned (пока шаманство)
invoke GetModuleHandle,0 ; Узнать кликуху проги
mov [DProg],RAX ; Сберечь её
invoke DialogBoxParam,[DProg],DWIN1,HWND_DESKTOP,DialogProc1,0 ; Нарисовать и зырить окошко 1
test rax, rax ; Спросить "привет" от кнопки
jz exit ; Если привета нет, то прыг на метку
invoke DialogBoxParam,[DProg],DWIN2,HWND_DESKTOP,DialogProc1,0 ; Нарисовать и зазырить окошко 2
test rax, rax ; Спросить "привет" от кнопки
jz exit ; Если привета нет то прыг на метку
invoke MessageBox, NULL,Mes_Ok,Mes_Zagolovok,MB_OK ; Вывести сообщение что привет дошёл
exit:
invoke MessageBox, NULL,Mes_End,Mes_Zagolovok,MB_OK ; Попращаться
invoke ExitProcess, 0 ; Умереть
; ----------------------- Подпрограмма создания и обслуживания диалогового окна ---------------------------------------
proc DialogProc1 hwnddlg,msg,wparam,lparam
mov [hwnddlg],rcx ; 64 битное шаманство. Осмыслю потом
mov [msg],rdx ; 64 битное шаманство. Осмыслю потом
mov [wparam],r8 ; 64 битное шаманство. Осмыслю потом
mov [lparam],r9 ; 64 битное шаманство. Осмыслю потом
cmp [wparam],KEY_OK ; нажатие кнопки OK
je EnterOk ; если оно, то переход на закрытие с выводом сообщения "Всё хорошо"
cmp [msg],WM_CLOSE ; нажатие кнопки [X]
je ProgExit ; просто выход
xor eax,eax ; обнуление
jmp Finish ; прыг на метку
EnterOk:
invoke EndDialog,[hwnddlg],1 ; закрытие с приветом "1"
jmp Finish
ProgExit:
invoke EndDialog,[hwnddlg],0 ; закрытие без привета "0"
Finish:
ret
endp
section '.rsrc' resource data readable ; А это секция потерянного дня, обматерённого Яндекса и полной ЖЁПЫ...
directory RT_DIALOG,dialogs1+dialogs2
resource dialogs1,DWIN1,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration1
dialog demonstration1,'Up1',40,40,60,60,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME,0,0,'Arial',10 ; Окно
dialogitem 'BUTTON','OK1',KEY_OK,5,5,35,30,WS_CHILDWINDOW+WS_VISIBLE+WS_TABSTOP ; Кнопочка
enddialog
resource dialogs2,DWIN2,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration2
dialog demonstration2,'Up2',40,40,100,100,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME,0,0,'Arial',10 ; Окно
dialogitem 'BUTTON','OK2',KEY_OK,5,5,35,30,WS_CHILDWINDOW+WS_VISIBLE+WS_TABSTOP ; Кнопочка
enddialog
section '.data' data readable writeable
Mes_Zagolovok db '--=Up=--',0 ; заголовок окна
Mes_Ok db ' Всё хорошо ',0
Mes_End db "Программа завершена ",0
DProg dq 0 ; Дескриптор программы
section '.idata' import data readable writeable
library kernel32, 'KERNEL32.DLL',user32, 'USER32.DLL'
include 'api\kernel32.inc'
include 'api\user32.inc'
В данном варианте присутствует строка
"directory RT_DIALOG,dialogs1+dialogs2" чисто моя отсебятина, однако при уборке одного из dialogs выпрыгивает "оставшееся" окно. Что делать незнаю. Метод научного тыка привёл к вывиху мозга, русскоязычного по теме ресурсов не густо, английским не владею (на случай если кто захочет помочь ссылкой на пример)
Меня постоянно преследуют умные мысли, но я быстрее!
|