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


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


При успешном создании окна в регистре EAX возвращается его описатель. Если произошла ошибка, EAX будет содержать 0. Постепенно мы разберем каждый параметр этой функции более подробно. Сейчас же попробуем создать приложение с использованием этой функции.

Сначала с помощью функции GetModuleHandleA нужно получить значение описателя для экземпляра нашего приложения. GetModuleHandleA принимает всего один аргумент - адрес строки с именем модуля, для которого нужно возвратить описатель. Подразумевается, что модуль уже загружен в адресное пространство того процесса, который вызывает эту функцию. (Например, так можно получать описатели для модулей загруженных dll). Если параметр равен нулю, возвращается описатель для самого вызывающего приложения (как в нашем случае).

Многие параметры CreateWindowExA будут равны нулю, например, дополнительное значение окна, описатель меню, описатель родительского окна, а также параметр расширенных стилей. Поскольку вызов CreateWindowExA следует непосредственно за вызовом GetModuleHandleA, значение описателя экземпляра приложения можно поместить в стек прямо из регистра EAX. Начальные координаты и размеры окна можно выбрать произвольные; пусть будут, например, такие: высота - 100h, ширина - 150h, начальная координата y - 100h, x - 150h пикселей. Нужно указать также стиль окна. Подробнее разбираться со стилями мы будем в другой раз, а сейчас просто используем значение 10CF0000h.

Остались 2 параметра: адреса строк с именами окна и класса окна. Имя окна тоже может быть произвольным (например, просто "Моё окно") или даже вовсе отсутствовать (в этом случае параметр равен 0). А вот имя класса окна должно быть предварительно зарегистрировано в системе вместе с соответствующей структурой WNDCLASSEX. Этим мы займемся в следующий раз, а сейчас используем один из предопределенных в системе классов - "BUTTON". Правда, окна этого класса должны использоваться лишь в качестве дочерних в составе других окон; но мы ради эксперимента создадим самостоятельное окно и посмотрим, что из этого получится. Соответствующие строки должны находиться в секции данных, с создания которой мы и начнем конструирование нашего приложения.




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



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