[Назад] [Далее]

7.3. Графические приложения

7.3.1. Окно типа MessageBox

Для того чтобы вывести на экран любое окно, программа обычно должна сначала описать его внешний вид и все свойства, то есть то, что называется классом окна. О том, как это сделать, — немного позже, а для начала выведем одно из окон с предопределенным классом — окно типа 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 как консольное приложение, ничего не изменится, текстовое окно с именем программы будет открыто до тех пор, пока окно с нашим сообщением не будет закрыто.


п»ї
"target=_blank><\/a>") //-->