Сообщение от
Oleg N. Cher
События: прерывание IM 2 наступило
да ну? окну могут придти сообщения: юзер кликнул мышкой, окно свернуто в панель задач, сработал таймер и т.д. Если в качестве gui используются диалоговое окно, то от его форм тоже приходят сообщения.
Ресурсы могут быть и другими.
Сообщение от
Oleg N. Cher
Пользуясь случаем, хочу поблагодарить топикстартера. Весьма интересно получается!
все это поверхностно. вызов функции с помощью передачи параметров на стеке используются в Borland Tasm 5.0, в Masm32 удобнее вызывать invoke.
За пример GetOpenFileName надо убивать на месте, без суда и следствия. Некоторые API-функции требуют в качестве параметра ссылку на структуры. Поэтому заполнить данные, как приведено в книге - ламерство чистейшей воды.
Код:
;у меня структура объявлена в исходнике, т.к. не было windows.inc под рукой
OPENFILENAME struct
lStructSize dd ?;size of this shit in bytes = 20*4
hwndOwner dd ?;owner of OPEN_dialog
hInstance dd ?;
lpstrFilter dd ?;"All Files",0,"*.*",0
lpstrCustomFilter dd ?;NULL
nMaxCustFilter dd ?;NULL
nFilterIndex dd ?;NULL
lpstrFile dd ?;filename buffer,must be start with 0
nMaxFile dd ?;must be at least 256 bytes long
lpstrFileTitle dd ?;NULL
nMaxFileTitle dd ?;NULL
lpstrInitialDir dd ?;NULL - current dir
lpstrTitle dd ?;Dlg_title, m.b. NULL
Flags dd ?;poka NULL
nFileOffset dw ?;NULL - shows offset of file name in path
nFileExtension dw ?;NULL - " - file ext in path
lpstrDefExt dd ?;NULL
lCustData dd ?;message for Hook Procedure
lpfnHook dd ?;NULL
lpTemplateName dd ?;NULL
OPENFILENAME ends
.data
file_open OPENFILENAME <19*4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>
.code
;где-то в процедуре программы:
mov eax,dlg_hwnd
mov dword ptr file_open.hwndOwner,eax
mov eax,hinst
mov file_open.hInstance,eax
mov file_open.lpstrFilter,offset flt_open_name
mov file_open.lpstrFile,offset tmpbuf1
mov file_open.nMaxFile,03FFh
mov file_open.lpstrDefExt,0
mov file_open.Flags,OFN_HIDEREADONLY+OFN_ALLOWMULTISELECT+OFN_EXPLORER
mov byte ptr tmpbuf1,0
mov file_open.lpstrCustomFilter,0
mov file_open.nMaxCustFilter,1023-12
mov file_open.lpstrDefExt,0
call GetOpenFileNameA,offset file_open
test eax,eax
je prog_end
Далее, секции программы могут быть разными:
.data? - неинициализированные данные
.data - данные, заданные заранее - сообщения и тд
.code - сам код
Все излюбленные трюки кодеров на Z80 идут лесом - нельзя записывать данные в секцию .code, и вообще много чего нельзя.
В общем, я начинал с книги Зубкова, потом, когда был доступ в интернетам, с Iczelion'a(есть переводы на русском). Да и сейчас, я знаю, что не изучил все нюансы.
И еще: Masm32 позволяет массу вкусностей: объявление локальных переменных (local/assume), и условные конструкции IF