Сис. функция 0 - определить и нарисовать окно

From KolibriOS wiki
Jump to navigation Jump to search
Функция 0

Состояние: поддерживается
Исходный код: Ссылка
Вызов

asm: mov eax, 0
mcall: mcall 0
Константы для регистров:

eax:
SF_CREATE_WINDOW (0)

Возвращает:

Функция 0 - определить и нарисовать окно.

Определяет окно приложения; рисует рамку окна, заголовок и рабочую область. Для окон со скином также определяет стандартные кнопки закрытия и минимизации.

Параметры

eax = 0 - номер функции
ebx = [координата по оси x]*65536 + [размер по оси x]
ecx = [координата по оси y]*65536 + [размер по оси y]
edx = 0xXYRRGGBB, где:

edx
X Y RRGGBB
Содержит биты DCMA, устанавливающие параметры:
  • A = 1 - Окно имеет заголовок: 0 - нет, 1 - да.
  • B = 1 - Координаты всех графических примитивов задаются относительно клиентской области окна: 0 - нет, 1 - да
  • C = 1 - Не закрашивать рабочую область при отрисовке окна: 1 - да, 0 - нет
  • D = 0 - Заливка рабочей области цветом: 1 - градиентная, 0 - сплошной цвет
Определяет стиль окна (0-15)
  • 0 - тип I - окно фиксированных размеров
  • 1 - только определить область окна, ничего не рисовать
  • 2 - тип II - окно изменяемых размеров
  • 3 - окно со скином
  • 4 - окно со скином фиксированного размера

* 5-15 - зарезервировано; вызов функции игнорируется

Определение цвета рабочей области (красный, зелёный, синий). Игнорируется для окна со стилем Y=1

📝Примечание для X (бит A): для стилей Y=3,4 адрес строки заголовка задаётся в edi. Для прочих стилей используется функция функция 71.1
⚠️Примечание для Y: Стили типа I и II не должны более использоваться и оставлены для совместимости с устаревшими приложениями.


📝Следующие параметры предназначены для окон типа I и II (Y=0, 2) и игнорируются для стилей Y=1,3:

  • esi = 0xXYRRGGBB - цвет заголовка, где:
esi
X Y RRGGBB
Определение градиента заголовка:
  • X = 0 - без градиента
  • X = 4 - негативный градиент (только для окон II типа)
  • X = 8 - обычный градиент
  • Другие значения зарезервированы
Возможность перетаскивать окно (работает для всех стилей):
  • Y = 0 - обычное окно
  • Y = 1 - неперемещаемое окно
  • Другие значения зарезервированы
Определение цвета (красный, зелёный, синий)

Замечания

  • Положение и размеры окна устанавливаются при первом вызове этой функции и игнорируются при последующих; для изменения положения и/или размеров уже созданного окна используйте сис. функцию 67.
  • Для окон стилей Y=3,4 с заголовком (A=1) строка заголовка устанавливается при первом вызове этой функции и игнорируется при последующих (точнее говоря, игнорируется после вызова сис. функции 12.2 - конца перерисовки); для изменения строки заголовка уже созданного окна используйте сис. функцию 71.1.
  • Если использовать окна соответствующих стилей, то положение и/или размеры окна могут меняться пользователем. Текущие положение и размеры могут быть получены вызовом функции 9.
  • Окно должно умещаться на экране. Если переданные координаты и размеры не удовлетворяют этому условию, то соответствующая координата (или, возможно, обе) считается нулем, а если и это не помогает, то соответствующий размер (или, возможно, оба) устанавливается в размер экрана.

Далее обозначим xpos,ypos,xsize,ysize - значения, передаваемые в ebx, ecx. Координаты приводятся относительно левого верхнего угла окна, который, таким образом, задается как (0,0), координатами правого нижнего угла является (xsize,ysize).

  • Размеры окна понимаются в смысле координат правого нижнего угла. Это же относится и ко всем остальным функциям. Это означает, что реальные размеры на 1 пиксель больше.

Отрисовка окон разных стилей (см. параметр edx, Y)

Определение области окна без отрисовки содержимого (Y=1)

Полностью определяется приложением.

Окно со скином (Y=3, 4)

  1. рисуется внешняя рамка шириной 1 пиксель цвета 'outer' из скина
  2. рисуется промежуточная рамка шириной 3 пикселя цвета 'frame' из скина
  3. рисуется внутренняя рамка шириной 1 пиксель цвета 'inner' из скина
  4. рисуется заголовок (по картинкам из скина) в прямоугольнике (0,0) - (xsize,_skinh-1)
  5. если ysize>=26, то закрашивается рабочая область окна - прямоугольник с левым верхним углом (5,_skinh) и правым нижним (xsize-5,ysize-5) - цветом, указанным в edx (с учетом градиента)
  6. определяются две стандартные кнопки: закрытия и минимизации (см. функцию 8)
  7. если A=1 и в edi (ненулевой) указатель на строку заголовка, то она выводится в заголовке в месте, определяемом скином
  8. Значение переменной _skinh доступно как результат вызова подфункции 4 функции 48

Примеры использования