Программные функции операционной системы Windows, страница 3

     Паpаметpы:

     Parent: Окно, владеющее блоком сообщений.

     Txt: отображаемое сообщение (заканчивающееся пустым символом).

     Caption: Заголовок блока диалога (заканчивающийся пустым символом) или nil для "Error" ("Ошибка").

     TextType: Одна или комбинация констант mb_. См. pаздел "Флаги блока сообщения, mb_" в главе 1.

     Возвpащаемое значение:

     В случае успешного завершения одна из следующих констант: id_Abort, id_Cancel, id_Ignore, id_No, id_OK, id_Retry или id_Yes. См. pаздел "Идентификатоpы команд блока диалога, id_" в главе 1.

Вот эту функцию мы и используем в программе для вывода нашего текста. Функция не требует длительной подготовки к своему использованию: описанию параметров и регистрации окна, в качестве окна-родителя для нее можно выбрать центральное окно ОС Windows, которое называется DeskTop. Опишем  эту функцию как внешнюю (функция будет предоставлена операционной системой «из вне…») в тексте нашей программы:

extrn   MESSAGEBOX:PROC

Теперь начнем  описывать данные, используемые нашей программой. В режиме программирования в TASM, называемом IDEAL (который устанавливается по умолчанию) сегмент данных может начинаться в любом месте программы кодовым словом:

.data

Первые 16-ть байт области данных программы следует зарезервировать для менеждера  16-ти битных задач ОС Windows. Уж так создали этот менеджер программисты Билла Гейса тут нам ничего не остается делать, как смириться. «Вынь и положь» им эти шестнадцать байт в начале Вашей программы. При запуске приложения ОС разместит в них свою системную информацию. Место в программе под эту информацию рекомендуется задать так:

DB 16 DUP(0)

Далее расположим в области данных текстовые строки, которые будем выводить в окне. Это собственно наше сообщение, выводимое в центре окна MessageBox:

szMsg           db 'HELLO, WORLD!',0

и заголовок этого окна:

szCapt          db 'Моя ПЕРВАЯ программа',0

Имена для этих текстовых строк szMsg  и  szCapt  мы придумали произвольно. Вы можете их заменить на что-нибудь более понятное Вам. Обратите внимание, что обе текстовые строки заканчиваются кодом ноль. Это ОБЯЗАТЕЛЬНО. Практически во все системные функции ОС Windows текстовые строки подаются в формате языка “C” – с замыкающим нулем (видно к моменту написания этих функций у Била Гейса уволились все программисты-паскалисты и на их смену пришли программисты языка C).

Теперь можно начать писать код программы. Кодовый сегмент в стандарте Ассемблера Ideal начинается кодовым словом:

.code

далее следует метка начала программы, например:

start:

Во всех 16-ти разрядных приложениях, компилируемых в EXE файлы первым делом желательно установить регистр данных DS на область наших данных, описанных выше. Это делается стандартным присваиванием в DS адреса системной метки сегмента данных - @data. А так как напрямую в DS ее присвоить нельзя, перебрасываем адрес через AX:

mov     ax, @data

mov     ds, ax         

А теперь просто вызовем системную функцию MessageBox, послав в нее правильно параметры например так:

call    MESSAGEBOX,0,ds,offset szMsg,ds,offset szCapt,0      

Вот это – самый ответственный момент: правильно послать параметры в системную функцию, поэтому разберем его поподробнее.

Как было описано выше в справочнике SDK по API функциям, функция MessageBox имеет четыре параметра:

Parent: HWnd;     -   хэндел окна родителя;

Txt: PChar;          -   указатель  на строку с основным текстом сообщения;

Caption: PChar;   -   указатель на строку с текстом заголовка окна;

TextType: Word    -   код описывающий число кнопок на окне, и вид иконок