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

Последнее обновление: 03.07.2023

Для создания графического приложения в Windows применяется библиотека user32.lib. Рассмотрим создание простейшего графического приложения на примере диалогового окна. Для создания диалогового окна в WinAPI можно использовать функцию MessageBoxA, которая имеет следующее определение на языке C++:

int MessageBoxA(
  [in, optional] HWND   hWnd,
  [in, optional] LPCSTR lpText,
  [in, optional] LPCSTR lpCaption,
  [in]           UINT   uType
);

Первый параметр - hWnd представляет дескриптор родительского окна. Если родительское окно не применяется, то этот параметр имеет значение NULL. Второй параметр представляет текст отображаемого в окне сообщения, а третий параметр - текст заголовка окна. Четвертый параметр - числовое значение, которое указывает, какие кнопки будут использоваться на окне.

Рассмотрим создание графического окна на примере. Пусть у нас есть файл hello.asm со следующим кодом:

includelib user32.lib  ; подключаем библиотеку user32.lib

externdef MessageBoxA:PROC  ; подключаем функцию MessageBoxA

.data
message byte "Hello METANIT.COM!",0     ; сообщение в окне
win_title byte "Asm Window", 0          ; заголовок окна

.code
main proc
    sub  rsp, 40        ; 32 (shadows storage) + 8 (выравнивание)
    xor rcx, rcx        ; HWin = NULL
    lea rdx, message    ; отображаемое сообщение
    lea r8, win_title   ; Заголовок диалогового окна
    mov r9d, 0          ; 0 - кнопка "OK"
    call MessageBoxA    ; вызываем функцию MessageBoxA
    add  rsp, 40
    ret
main endp
end

Вначале подключаем библиотеку user32.lib

includelib user32.lib

Далее подключаем внешнюю функцию MessageBoxA:

externdef MessageBoxA:PROC

Поскольку родительское окно не используется, то для первого параметра в регистр RCX передаем значение 0:

xor rcx, rcx

Второй и третий параметры, которые передаются соответственно через регистры RDX и R8, принимают в качестве теста сообщения и заголовка адреса переменных message и win_title:

lea rdx, message
lea r8, win_title

В качестве кнопки последнему параметру через регистр R9 передаем число 0. Это значит, что окно будет иметь одну кнопку "OK":

mov r9, 0

Можно передать и другие значения. Например, число 1 устанавливает кнопки OK и Cancel, а число 4 - кнопки "Yes" и "No". Полный список значений можно посмотреть в документации.

Для компиляции программу компоновщику надо передать параметр /subsystem:windows. Данный параметр указывает, что будет создаваться графическое приложение. Так, скомпилируем приложение с помощью следующей команды:

ml64 hello.asm /link /subsystem:windows /entry:main

В итоге после запуска скомпилированного приложения мы увидим следующее окно:

Графическое приложение на ассемблере в Windows
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850