Код: ;======================================================; ;= Simple graphical application for Miraculix =; ;= Простейшее графическое приложение для Miraculix =; ;======================================================; use32 ; 32-битный код mov edx, gui_dll ; Смещение имени модуля xor eax,eax ; Функция ядра #0 - получение точки входа в модуль int 0x90 ; Вызов ядра Miraculix mov [WinGUI],ebx ; Запомнить точку входа в модуль GUI.DLL call Draw_Window ; Нарисуем простейшее окно Wait_Event: ; Начало обработки событий mov eax,0xB ; Функция графического ядра (GUI.DLL) #0x0B - Ждать события call [WinGUI] ; Вызов GUI.DLL ; В DL - ID события, в остальных регистрах параметры ;===========-- ;=== Перерисовка ;======================-- cmp dl,1 jne no_Redraw ; Перерисовка? call Draw_Window ; Если да, перерисовать окно jmp Wait_Event ; Вернутся в начало цикла ожидания событий no_Redraw: ;===========-- ;=== Получение фокуса ;======================-- cmp dl,2 jne no_GetFocus mov al,8 ; Получить фокус call [WinGUI] jmp Wait_Event no_GetFocus: ;===========-- ;=== Потеря фокуса ;======================-- cmp dl,3 jne no_LostFocus mov ecx,-2 ; Перерисовать только рамку и заголовок mov al,2 call [WinGUI] jmp Wait_Event no_LostFocus: ;===========-- ;=== Выход ;======================-- cmp dl,4 jne no_Exit mov al,4 ; Функция графического ядра (GUI.DLL) #0x04 - Выход call [WinGUI] jmp Wait_Event no_Exit: jmp Wait_Event ;========================; ;=== Создать окно ===; ;========================; Draw_Window: mov esi,50 *65536+ 350 ; Координата начала окна по оси X - 50, размер по X - 350 mov edi,50 *65536+ 250 ; Координата начала окна по оси Y - 50, размер по Y - 350 xor ebp,ebp ; 0 для обычного окна mov ecx,11100000000b ; Атрибут окна. mov edx, WinName ; Заголовок окна xor eax,eax ; Функция графического ядра (GUI.DLL) #0 - Определить окно call [WinGUI] mov ecx,-1 ; Цвет клиентской области окна (-1 цвет по умолчанию) mov al,2 ; Функция графического ядра (GUI.DLL) #0x02 - Нарисовать окно call [WinGUI] ret ;========================; ;=== Секция данных ===; ;========================; WinName db 'Example application',0 gui_dll db 'GUI',0 WinGUI dd 0
|
|