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


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


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

Класс окна представляет собой набор атрибутов, которые система использует в качестве шаблона при создании окна. Сюда относятся такие внешние атрибуты окна, как значок, форма курсора, фон окна, меню окна по умолчанию, а также набор стилей, называемых стилями класса окна и определяющих наиболее общие особенности поведения и отображения окна. Все эти атрибуты хранятся в специальной структуре WNDCLASSEX.

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

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

Рассмотрим функцию CreateWindowExA подробнее. Эта функция из модуля User32.dll принимает аж целых 12 параметров, которые должны быть размещены в стеке в следующем порядке:

  1. адрес переменной, в которой находится дополнительное значение для передачи некоторым типам окон. Если окну не требуется дополнительное значение, этот параметр равен нулю;
  2. описатель экземпляра приложения, которому принадлежит окно. Это значение может быть получено с помощью функции GetModuleHandleA из модуля Kernel32.dll;
  3. в зависимости от стиля окна, этот параметр является либо идентификатором дочернего окна, либо описателем меню. Если создаваемое окно - дочернее, это идентификатор окна; если нет - описатель меню окна (при отсутствии меню параметр равен нулю);
  4. описатель родительского окна или окна-владельца (если окно самостоятельное, параметр равен нулю);
  5. высота окна в пикселах;
  6. ширина окна в пикселах;
  7. начальная вертикальная координата окна. Если окно дочернее, вертикальное положение отсчитывается от левого верхнего угла клиентской области родительского окна; если окно самостоятельное - от левого верхнего угла экрана;
  8. начальная горизонтальная координата окна. Аналогично вертикальной координате, за точку отсчета для дочерних окон принимается левый верхний угол клиентской области родительского окна, для самостоятельных окон - левый верхний угол экрана;
  9. флаги, указывающие стиль окна;
  10. адрес строки с именем окна;
  11. адрес строки с именем класса окна;
  12. флаги, указывающие расширенный стиль окна.




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



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