Сис. функция 0 - определить и нарисовать окно
| Функция 0 | |
|
| |
| Состояние: | поддерживается |
| Исходный код: | Ссылка |
| Вызов | |
|
| |
| asm: | mov eax, 0 |
| mcall: | mcall 0 |
| Константы для регистров: | |
|
eax: | |
| Возвращает: | |
| – | |
Функция 0 - определить и нарисовать окно.
Определяет окно приложения; рисует рамку окна, заголовок и рабочую область. Для окон со скином также определяет стандартные кнопки закрытия и минимизации.
Параметры
eax = 0 - номер функции
ebx = [координата по оси x]*65536 + [размер по оси x]
ecx = [координата по оси y]*65536 + [размер по оси y]
edx = 0xXYRRGGBB, где:
| edx | ||
|---|---|---|
| X | Y | RRGGBB |
Содержит биты DCMA, устанавливающие параметры:
|
Определяет стиль окна (0-15)
* 5-15 - зарезервировано; вызов функции игнорируется |
Определение цвета рабочей области (красный, зелёный, синий). Игнорируется для окна со стилем Y=1 |
📝Примечание для X (бит A): для стилей Y=3,4 адрес строки заголовка задаётся в edi. Для прочих стилей используется функция функция 71.1
⚠️Примечание для Y: Стили типа I и II не должны более использоваться и оставлены для совместимости с устаревшими приложениями.
edi- адрес строки заголовка для стилей Y=3, 4 (см. сис. функцию 71.1).
📝Следующие параметры предназначены для окон типа I и II (Y=0, 2) и игнорируются для стилей Y=1,3:
esi= 0xXYRRGGBB - цвет заголовка, где:
| esi | ||
|---|---|---|
| X | Y | RRGGBB |
Определение градиента заголовка:
|
Возможность перетаскивать окно (работает для всех стилей):
|
Определение цвета (красный, зелёный, синий) |
Замечания
- Положение и размеры окна устанавливаются при первом вызове этой функции и игнорируются при последующих; для изменения положения и/или размеров уже созданного окна используйте сис. функцию 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 пиксель цвета '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
Примеры использования
| |||||||||||||||||||||||||||||