Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2012, 15:07   #1
Полный 30h
Пользователь
 
Аватар для Полный 30h
 
Регистрация: 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 выпрыгивает "оставшееся" окно. Что делать незнаю. Метод научного тыка привёл к вывиху мозга, русскоязычного по теме ресурсов не густо, английским не владею (на случай если кто захочет помочь ссылкой на пример)
Меня постоянно преследуют умные мысли, но я быстрее!
Полный 30h вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
файл ресурсов Ципихович Эндрю Microsoft Office Word 0 13.06.2011 11:23
файл ресурсов Rozalinda Общие вопросы Delphi 3 20.10.2008 20:31
Файл ресурсов Stanislav Общие вопросы Delphi 11 21.11.2007 08:27