SysFn00/ru

From KolibriOS wiki
Revision as of 19:47, 27 March 2010 by SoUrcerer (talk | contribs)
Jump to navigation Jump to search

Функция 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=2)
    • 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