SysFn00/ru

From KolibriOS wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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


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

  • eax = 0 - номер функции
  • ebx = [координата по оси x]*65536 + [размер по оси x]
  • ecx = [координата по оси y]*65536 + [размер по оси y]
  • edx = 0xXYRRGGBB, где:
  • Y = стиль окна:
  • Y=0 - тип I - окно фиксированных размеров
  • Y=1 - только определить область окна, ничего не рисовать
  • Y=2 - тип II - окно изменяемых размеров
  • Y=3 - окно со скином
  • Y=4 - окно со скином фиксированных размеров
  • остальные возможные значения (от 5 до 15) зарезервированы,
вызов функции с такими Y игнорируется
  • RR, GG, BB = соответственно красная, зеленая, синяя
составляющие цвета рабочей области окна
(игнорируется для стиля Y=1)
  • X = DCBA (биты)
  • A = 1 - у окна есть заголовок; для стилей Y=3,4 адрес строки
заголовка задаётся в edi, для прочих стилей
используется подфункция 1 функции 71
  • B = 1 - координаты всех графических примитивов задаются
относительно клиентской области окна
  • C = 1 - не закрашивать рабочую область при отрисовке окна
  • D = 0 - нормальная заливка рабочей области, 1 - градиентная
Следующие параметры предназначены для окон типа I и II и
игнорируются для стилей Y=1,3:
  • esi = 0xXYRRGGBB - цвет заголовка
  • RR, GG, BB определяют сам цвет
  • Y=0 - обычное окно, Y=1 - неперемещаемое окно (работает для всех стилей окон)
  • X определяет градиент заголовка: X=0 - нет градиента,
X=8 - обычный градиент,
для окон типа II X=4 - негативный градиент
  • прочие значения X и Y зарезервированы
  • edi = 0x00RRGGBB - цвет рамки

Возвращаемое значение:

  • функция не возвращает значения

Замечания:

  • Положение и размеры окна устанавливаются при первом вызове
этой функции и игнорируются при последующих; для изменения
положения и/или размеров уже созданного окна используйте
67-ю функцию.
  • Для окон стилей Y=3,4 с заголовком (A=1) строка заголовка
устанавливается при первом вызове этой функции и игнорируется при
последующих (точнее говоря, игнорируется после вызова
подфункции 2 функции 12 - конца перерисовки);
для изменения строки заголовка уже созданного окна используйте
подфункцию 1 функции 71.
  • Если использовать окна соответствующих стилей, то положение
и/или размеры окна могут меняться пользователем.
Текущие положение и размеры могут быть получены вызовом функции 9.
  • Окно должно умещаться на экране. Если переданные координаты
и размеры не удовлетворяют этому условию, то соответствующая
координата (или, возможно, обе) считается нулем, а если и это
не помогает, то соответствующий размер (или, возможно, оба)
устанавливается в размер экрана.
Далее обозначим xpos,ypos,xsize,ysize - значения, передаваемые
в ebx,ecx. Координаты приводятся относительно левого верхнего
угла окна, который, таким образом, задается как (0,0), координаты
правого нижнего угла суть (xsize,ysize).
  • Размеры окна понимаются в смысле координат правого нижнего угла.
Это же относится и ко всем остальным функциям.
Это означает, что реальные размеры на 1 пиксель больше.
  • Вид окна типа I:
  • рисуется внешняя рамка цвета, указанного в edi,
шириной 1 пиксель
  • рисуется заголовок - прямоугольник с левым верхним углом (1,1)
и правым нижним (xsize-1,min(25,ysize)) цвета, указанного в esi
(с учетом градиента)
  • если ysize>=26, то закрашивается рабочая область окна -
прямоугольник с левым верхним углом (1,21) и правым нижним
(xsize-1,ysize-1) (размерами (xsize-1)*(ysize-21)) - цветом,
указанным в edx (с учетом градиента)
  • если A=1 и строка заголовка установлена подфункцией 1
функции 71, то она выводится в соответствующем месте заголовка
  • Вид окна стиля Y=1:
  • полностью определяется приложением
  • Вид окна типа II:
  • рисуется внешняя рамка шириной 1 пиксель "затенённого" цвета
edi (все составляющие цвета уменьшаются в два раза)
  • рисуется промежуточная рамка шириной 3 пикселя цвета edi
  • рисуется внутренняя рамка шириной 1 пиксель
"затенённого" цвета edi
  • рисуется заголовок - прямоугольник с левым верхним углом (4,4)
и правым нижним (xsize-4,min(20,ysize)) цвета, указанного в esi
(с учетом градиента)
  • если ysize>=26, то закрашивается рабочая область окна -
прямоугольник с левым верхним углом (5,20) и правым нижним
(xsize-5,ysize-5) - цветом, указанным в edx (с учетом градиента)
  • если A=1 и строка заголовка установлена подфункцией 1
функции 71, то она выводится в соответствующем месте заголовка
  • Вид окна со скином:
  • рисуется внешняя рамка шириной 1 пиксель
цвета 'outer' из скина
  • рисуется промежуточная рамка шириной 3 пикселя
цвета 'frame' из скина
  • рисуется внутренняя рамка шириной 1 пиксель
цвета 'inner' из скина
  • рисуется заголовок (по картинкам из скина) в прямоугольнике
(0,0) - (xsize,_skinh-1)
  • если ysize>=26, то закрашивается рабочая область окна -
прямоугольник с левым верхним углом (5,_skinh) и правым нижним
(xsize-5,ysize-5) - цветом, указанным в edx (с учетом градиента)
  • определяются две стандартные кнопки: закрытия и минимизации
(смотри функцию 8)
  • если A=1 и в edi (ненулевой) указатель на строку заголовка,
то она выводится в заголовке в месте, определяемом скином
  • Значение переменной _skinh доступно как результат вызова
подфункции 4 функции 48


Константы для регистров:

eax - SF_CREATE_WINDOW (0)