Win32asm обучение


Урок 12 - Первая программа - часть 2


После этого текста следует целый список констант и флагов (которые определены в windows.inc). Я не отобразил его здесь, потому что он слишком большой. Смотрите в справочнике, вы можете увидеть, что функция MessageBox берет 4 параметра: родительское окно, указатель на строку сообщения, указатель на строку заголовка и тип messagebox.

hWnd может быть NULL, потому, что наша программа не имеет окна.
lpText Должен быть указателем на наш текст. Это значит, что этот параметр - смещение в памяти, где находится наш текст.
lpCaption смещение строки заголовка.
uType комбинация значений, описанных в справочнике, таких как MB_OK, MB_OKCANCEL, MB_ICONERROR, и т.д.

Давайте сначала определим две строки для messagebox:

Добавте это в first.asm:

.data

MsgText db "Hello world!",0
MsgTitle db "This is a messagebox",0

.data указывает на начало секции данных. Директива db непосредственно вставляет байты, а строка это набор байт, секция данных будет содержать строки выше, а чтобы они заканчивались 0, вставляем дополнительно ,0. MsgText содержит смещение первой строки, а MsgTitle смещение второй. Теперь мы можем использовать функцию:

invoke MessageBox, NULL, offset MsgText, offset MsgTitle, NULL

А так, как вы используете invoke, вы можете использовать (более безопасную) ADDR вместо offset:

invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, NULL

Мы еще не смотрели на последний параметр, но это прекрасно будет работать, потому что MB_OK (стиль для messagebox с кнопкой OK) равняется 0 (NULL). Но Вы можете использовать любой другой стиль. UType (4-ый параметр) определяет:

Определяет флаги, которые определяют содержание и поведение диалогового окна. Этот параметр может быть комбинацией флагов из следующих групп флагов.

Теперь возьмем для напримера, что мы хотим простой messagebox с кнопкой OK с значком 'информация'. MB_OK это стиль для кнопки OK, MB_ICONINFORMATION это стиль для информационного значка. Стили объединены с помощью оператора 'or'. Это не опкод. Masm выполнит операцию or перед ассемблированием. Вместо or, вы можете использовать знак + (добавление), но так иногда возникают проблемы с накладывающимися стилями (один стиль содержит некоторые другие). В нашем случае, вы можете использовать +.




- Начало -  - Назад -  - Вперед -