Win32 в машинных кодах


Окна Windows - часть 6


Проверив файл report.lst на наличие ошибок, можно запускать wnd.exe. Что-то мелькает? Хлопайте в ладоши! Это не ошибка - так и должно быть. Ошибка, если появится сообщение от Windows или вообще ничего не появится. Наше приложение создает окно, но завершается раньше, чем мы успеваем что-либо рассмотреть. Как "остановить" приложение? Один раз мы это уже делали, когда создавали самый первый PE-файл (в статье "Исполняемые файлы Windows"): нужно зациклить программу с помощью инструкции EB FE. Ее можно ввести вместо параметра функции ExitProcess (т.е. в файле code.txt вместо последнего 'db 6a 0' записать 'db eb fe'). Изменив файл code.txt, нужно снова запустить make.bat.

Теперь, запустив wnd.exe, можно полюбоваться на созданное окно (хотя на самом деле оно пока выглядит не так, как должно). Все, что надо, на месте - и три кнопки в правом верхнем углу, и строка с именем, и даже значок слева. Только вот сделать с ним ничего не удастся - ни сдвинуть, ни изменить размеры, ни даже закрыть. Обратите внимание - когда указатель мыши попадает в область нашего окна, курсор принимает ждущую форму. Если переключиться на другое окно, которое перекроет наше, оно исчезнет и больше не появится.

Все это происходит потому, что окно должно обрабатывать сообщения, которые система начинает посылать в очередь сообщений приложения, создавшего окно, сразу после его создания. Мы же обработку сообщений не предусмотрели. Но этим мы займемся уже в следующий раз. А пока можно поэкспериментировать с изменением значений тех параметров функции CreateWindowExA, которые можно пронаблюдать - т.е. размеров и расположения окна. Учтите, что данные в коде - 16-ричные. А чтобы завершить приложение, придется снова "прибивать" его из менеджера задач, нажав Ctrl-Alt-Del .




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



Книжный магазин