| [Назад] [Далее] | ![]() |
Для того чтобы вывести на экран любое окно, программа обычно должна сначала описать его внешний вид и все свойства, то есть то, что называется классом окна. О том, как это сделать, — немного позже, а для начала выведем одно из окон с предопределенным классом — окно типа MessageBox. MessageBox — это маленькое окно с указанным текстовым сообщением и одной или несколькими кнопками. В нашем примере сообщением будет традиционное «Hello world!», и кнопка будет всего одна — ОК.
; winhello.asm
; Графическое win32-приложениe
; Выводит окно типа mesagebox с текстом "Hello world!"
;
include def32.inc
include kernel32.inc
include user32.inc
.386
.model flat
.const
; заголовок окна
hello_title db "First win32 GUI program",0
; сообщение
hello_message db "Hello world!",0
.code
_start:
push MB_ICONINFORMATION ; стиль окна
push offset hello_title ; адрес строки с заголовком
push offset hello_message ; адрес строки с сообщением
push 0 ; идентификатор предка
call MessageBox
push 0 ; код выхода
call ExitProcess ; завершение программы
end _start
Естественно, нам потребуется добавить к файлу def32.inc строку:
; из winuser.h MB_ICONINFORMATION equ 40h
и создать новый файл, user32.inc, в который будут входить определения функций из user32.dll — библиотеки, куда входят все основные функции, отвечающие за оконный интерфейс:
; user32.inc
; включаемый файл с определениями функций из user32.dll
;
ifdef _TASM_
includelib import32.lib
; имена используемых функций
extrn MessageBoxA:near
; присваивания для облегчения читаемости кода
MessageBox equ MessageBoxA
else
includelib user32.lib
; истинные имена используемых функций
extrn __imp__MessageBoxA@16:dword
; присваивания для облегчения читаемости кода
MessageBox equ __imp__MessageBoxA@16
Теперь можно скомпилировать эту программу аналогично тому, как мы компилировали winurl.asm, и запустить — на экране появится маленькое окно с нашим сообщением и кнопкой ОК, которое пропадет после того, как будет нажата эта кнопка. Если скомпилировать winhello.asm как консольное приложение, ничего не изменится, текстовое окно с именем программы будет открыто до тех пор, пока окно с нашим сообщением не будет закрыто.