7.3.1 Окно типа MessageBox

Для того чтобы вывести на экран любое окно, программа обычно должна сна­чала описать его внешний вид и все свойства, то есть то, что называется классом окна. О том, как это сделать, - немного позже, а для начала выведем одно из окон с предопределенным классом - окно типа MessageBox. MessageBox - это малень­кое окно с указанным текстовым сообщением и одной или несколькими кнопка­ми. В нашем примере сообщением будет традиционное Hello world!

; winhello.asm

;  Графическое *ап32-приложение.

; Выводит окно типа messagebox с текстом "Hello world!".

include def32.1nc include kernel32.inc

include user32.inc

.model flat .const

;   Заголовок окна. '

hello_title ; Сообщение, hellojnessage . code

_start:

push push push push • call

push

call end start

db "First Win32 GUI program", 0

db "Hello

nIb.iconinformation

offset

offset hello_message о

MessageBox

ExitProcess

Силь окна. Адрес строки с

Адрес строки

заголовком, сообщением.

Идентификатор предка.

Код выхода.

Завершение программы.

Естественно, нам потребуются новые добавления к включаемым файлам: добавить к файлу def32.inc строку

; №winuser.h. MB.IC0NINFORMATION equ 40h

и создать новый файл, useг32.inc, куда будут входить определения функций из user32.dll - библиотеки, где расположены все основные функции, отвечающие за

оконный интерфейс:

; user32.inc

; Включаемый файл с определениями функций из user32.dll. ifdef _TASM_

includelib ±mport32.lib

; Имена используемых функций.

extrn MessageBoxAmear

; Присваивания.

MessageBox equ MessageBoxA

else

includelib user32.1ib ; Истинные имена используемых функций.

.    extrn_imp_MessageBoxA@l6:dword

; Присваивания для облегчения читаемости кода.

MessageBox equ_imp_MessageBoxA@16 .

endif ■

Теперь можно скомпилировать эту программу аналогично тому, как мы компи­лировали winurl.asm, и запустить — на экране появится маленькое окно с нашим сообщением, которое пропадет после нажатия кнопки ОК. Если скомпилировать winhello.asm как консольное приложение, ничего не изменится, но текстовое окно с именем программы будет открыто до тех пор, пока не закроется окно с нашим сообщением.