Специфікація BTRON3 (Український переклад) | Розділ 7: Графічна оболонка (GUI Shell)
Повернутися до змісту розділу Графічної оболонки
Попередня сторінка: Головний зміст Розділу 3 (Повернутися)
Наступна сторінка: 3.2 Менеджер панелей та діалогів (Перейти)
Менеджер вікон ядра BTRON3 керує багатовіконним середовищем робочого столу:
перекриттям вікон у Z-стеку, переміщенням, зміною розмірів, обробкою фокусу
введення та графічними елементами рамки (заголовок Titlebar, кнопки управління,
смуги прокручування Scrollbars).
Кожне вікно ідентифікується унікальним системним дескриптором WID
та прив'язується до власника-процесу.
Менеджер вікон підтримує такі типи вікон:
- Головне вікно (Вікно)
- Стандартне вікно прикладної програми.
- Залежне вікно (Вікно)
- Підпорядковане головному; може бути
відкрите лише активним процесом.
- Вікно переднього плану (Вікно)
- Завжди поверх інших; може
відкривати лише Frontend-процес.
- Внутрішнє вікно (Вікно)
- Пов'язує ID середовища малювання
з WID без управління рамкою; лише кілька операцій доступні.
- Панельне вікно (Вікно)
- Захоплює фокус введення для показу
діалогів і панелей; не підтримує переміщення/зміну розміру.
При відкритті вікна wopn_wnd() задаються атрибути:
typedef UW WDATTR; /* Бітова маска атрибутів вікна */
WA_STD |
0 = не нормалізований режим | |
| 1 = нормалізований режим (опційно) |
WA_WORK |
0 = r задає зовнішній прямокутник | |
| 1 = r задає робочу зону |
WA_FRAME |
0 = | |
| 1 = r задає зовнішній прямокутник вікна з рамкою |
WA_MAIN |
0 = головне вікно | |
| 1 = залежне вікно |
WA_SIZE |
0 = зміна розміру перетягуванням неможлива | |
| 1 = зміна розміру перетягуванням можлива |
WA_HHDL |
0 = горизонтальна зміна розміру недоступна |
(лише якщо WA_SIZE = 1) |
| 1 = горизонтальна зміна розміру доступна |
WA_VHDL |
0 = вертикальна зміна розміру недоступна |
| 1 = вертикальна зміна розміру доступна |
WA_RBAR |
0 = без правої смуги прокручування |
| 1 = є права смуга прокручування |
WA_BBAR |
0 = без нижньої смуги прокручування |
| 1 = є нижня смуга прокручування |
WA_LBAR |
0 = без лівої смуги прокручування |
| 1 = є ліва смуга прокручування |
WA_TITL |
0 = є рядок заголовка | |
| 1 = немає рядка заголовка |
WA_BGDSP |
0 = не оновлювати відображення у неактивному стані |
|
| 1 = оновлювати відображення навіть у неактивному стані |
- ※
WA_SIZE, WA_TITL визначають форму вікна.
- ※
- Якщо
WA_HHDL і WA_VHDL обидва = 1 — довільна зміна розміру.
Якщо обидва = 0 — ручки відсутні.
- ※
- Запит перемальовування при закритті панелі надсилається лише вікнам з
атрибутом
WA_BGDSP.
Атрибути відображення вікна (WDDISP)
Атрибути відображення задаються при відкритті і не можуть змінюватись після.
Не застосовуються до внутрішніх та панельних вікон.
typedef struct {
UW frame; /* Ширина рамки / номер патерну */
UW tlbg; /* Номер патерну фону заголовка */
UW barpat; /* Номер патерну частини смуги прокручування */
UW barbg; /* Номер патерну білої частини смуги прокручування */
COLOR tlcol; /* Колір тексту заголовка (від'ємне = за замовчуванням) */
} WDDISP;
tlbg, barpat, barbg задаються номером
даних типу PAT_DATA; 0 = за замовчуванням.
tlcol < 0 = колір за замовчуванням.
Значення за замовчуванням змінюються менеджером і впливають на всі
подальші вікна з атрибутами за замовчуванням.
Форма вказівника автоматично змінюється Менеджером вікон залежно від положення
(зона ручки, смуга прокручування, піктограма, робоча зона тощо). Прикладна
програма не повинна змінювати форму вказівника поза робочою зоною активного вікна;
у робочій зоні — зобов'язана встановлювати форму самостійно.
Вікна підтримують такі операції (реалізація Менеджером вікон + прикладна програма):
відкриття, закриття, переміщення, зміна розміру, згортання, активація (передача фокуса),
прокручування вмісту, перемальовування, D&D між вікнами.
Менеджер вікон формує події для прикладних програм через wget_evt().
Основні типи подій:
EV_KEYDWN / EV_KEYUP- Натискання/відпускання клавіші.
EV_PNTDWN / EV_PNTUP / EV_PNTMOV- Натискання/відпускання/переміщення вказівника.
EV_SWITCH- Переключення активного вікна. Код команди (
W_*):
W_MOVE - Переміщення вікна
W_RESIZE - Зміна розміру
W_BSCROLL - Прокручування (кнопка)
W_JSCROLL - Прокручування (стрибок)
W_SWITCH - Переключення активного вікна
W_CLOSED - Вікно закрито
EV_REDISP- Запит перемальовування.
src=0: звичайний; src=1: від панелі.
EV_REQUEST- Запит від іншого процесу/менеджера:
W_PASTE - Запит вставки даних (D&D); відповідь
W_ACK/W_NAK обов'язкова.
W_DELETE - Запит закриття вікна; відповідь обов'язкова.
W_FINISH - Запит завершення процесу; відповідь обов'язкова.
W_VOBJREQ- Запит від Менеджера об'єктів (відповідь не потрібна).
W_OPENED - Сповіщення батьківського процесу про нове вікно.
EV_MENU- Натискання кнопки меню або PD з клавішею «Команда».
EV_RSWITCH- Переключення активного вікна з необхідністю перемальовування.
EV_INACT- Вікно перейшло з активного у неактивний стан.
src=0: переключення; src=1: відкриття панелі.
EV_MSG- Отримано міжпроцесне повідомлення (читається
rcv_msg()).
EV_NOMSG- Немає подій/повідомлень (лише для неактивного процесу).
Внутрішні повідомлення MS_MNG1 та MS_MNG2 зарезервовані
Менеджером вікон — прикладним програмам їх використовувати заборонено.
Спеціальний Frontend-процес може перехоплювати події вікна для попередньої обробки
(наприклад, «Екранна клавіатура»). Реєстрація через wdef_fep().
Усі функції повертають від'ємний код при помилці, «0» або «+» при успіху.
| wopn_wnd |
| Open Window |
| Відкриття вікна (головного або переднього плану) |
|
【Синтаксис / Прототип】
WID wopn_wnd(RECT *r, W org, TC *title, PAT *bgpat, WDATTR attr, WDDISP *atr)
【Параметри】
RECT | *r |
Початковий прямокутник вікна у абсолютних координатах. |
W | org |
ID батьківського/головного вікна (залежне вікно) або 0. |
TC | *title |
Рядок заголовка вікна (TRON Code). |
PAT | *bgpat |
Фоновий патерн робочої зони (NULL = за замовчуванням). |
WDATTR | attr |
Атрибути вікна (комбінація WA_*). |
WDDISP | *atr |
Атрибути відображення (NULL = за замовчуванням). |
【Значення, що повертається】
>= 0 ID вікна (WID)
< 0 Помилка (Код помилки)
【Детальний опис】
Створює нове головне або залежне вікно з вказаними атрибутами.
Нове вікно автоматично стає активним (отримує фокус введення) і виводиться на передній план.
Попередньо активне вікно отримує подію EV_INACT.
Залежне вікно може відкрити лише активний процес (інакше — EX_WPRC).
Вікно переднього плану може відкрити лише Frontend-процес.
При відкритому вікні панелі з того ж процесу — помилка EX_WND.
【Коди помилок】
EX_ADR : Недопустима адреса r, org, title, bgpat або atr.
EX_NOSPC: Нестача системної пам'яті.
EX_WID : Вікно (wid) не існує (батьківське/головне вікно не існує або належить
іншому процесу).
EX_WPRC : Не є процесом-менеджером вікна (активний процес для залежного вікна;
Frontend-процес для переднього плану; інші умови).
EX_WND : Тип/стан вікна не допускає операцію (є відкрита панель цього процесу;
відкритий повноекранний режим).
| wopn_iwd |
| Open Internal Window |
| Відкриття внутрішнього вікна |
|
【Синтаксис / Прототип】
WID wopn_iwd(W gid)
【Параметри】
W gid ID середовища малювання
【Значення, що повертається】
>= 0 ID вікна (WID)
< 0 Помилка (Код помилки)
【Детальний опис】
Відкриває середовище малювання gid як внутрішнє вікно. Рамка, управління
фокусом і переміщення не виконуються. Для внутрішнього вікна доступні лише:
wcls_wnd(), wget_gid(), wset_dat(), wget_dat().
Не є ціллю пошуку в wget_evt() і wfnd_wnd().
【Коди помилок】
EX_NOSPC: Нестача пам'яті.
EG_GID : ID середовища малювання (gid) не існує.
EX_WPRC : Frontend-процес.
| wopn_pwd |
| Open Panel Window |
| Відкриття панельного вікна |
|
【Синтаксис / Прототип】
WID wopn_pwd(RECT *r)
【Параметри】
RECT *r Абсолютні координати зовнішнього прямокутника
【Значення, що повертається】
>= 0 ID вікна (WID)
< 0 Помилка (Код помилки)
【Детальний опис】
Відкриває панельне вікно у вказаних координатах. Рамка не малюється; лише управління
існуванням. Переміщення/зміна розміру неможливі.
При відкритті захоплює фокус введення; попереднє активне вікно отримує EV_INACT.
При закритті фокус повертається до попереднього вікна і надсилається EV_SWITCH.
【Коди помилок】
EX_ADR : Недопустима адреса r або bgpat.
EX_NOSPC: Нестача пам'яті.
EX_WPRC : Frontend-процес.
| wcls_wnd |
| Close Window |
| Закриття / видалення вікна |
|
【Синтаксис / Прототип】
ERR wcls_wnd(W wid, W opt)
【Параметри】
W wid ID вікна
W opt 0 = звичайне закриття
!= 0 = примусове закриття (без відновлення попереднього стану)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Закриває вікно wid. При закритті активного вікна активується попереднє.
Залежні вікна закриваються автоматично. Після закриття WID більше недійсний.
【Коди помилок】
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан вікна не допускає операцію.
EX_WPRC : Не є процесом-менеджером вікна.
| wget_evt |
| Get Window Event |
| Отримання вікнової події |
|
【Синтаксис / Прототип】
W wget_evt(WEVENT *evt, W opt)
【Параметри】
WEVENT *evt Буфер для події
W opt Режим очікування: 0 = чекати; != 0 = не чекати (повернути EV_NOMSG)
【Значення, що повертається】
>= 0 Тип отриманої події (EV_*)
< 0 Помилка (Код помилки)
【Детальний опис】
Основна функція отримання вікнових подій. Для активного процесу: зчитує апаратні
події, шукає відповідне вікно, конвертує координати, перевіряє меню, оновлює
форму вказівника, переключає фокус, виконує Frontend-обробку.
Для неактивного процесу: зчитує повідомлення; при opt != 0 і відсутності
подій повертає EV_NOMSG.
【Коди помилок】
EX_ADR : Недопустима адреса evt.
| wpas_evt |
| Pass Event to Window Manager |
| Передача події до Менеджера вікон (для Frontend) |
|
【Синтаксис / Прототип】
W wpas_evt(W opt)
【Параметри】
W opt 0 = чекати на завершення обробки; != 0 = не чекати
【Значення, що повертається】
>= 0 Тип події, переданої далі
< 0 Помилка (Код помилки)
【Детальний опис】
Frontend-процес передає поточну подію (отриману через wget_evt())
далі до цільового вікна без обробки. Використовується для «прозорого» пропуску подій.
【Коди помилок】
EX_WPRC : Не є Frontend-процесом.
EX_WND : Немає поточної події для передачі.
| wugt_evt |
| Unget Event |
| Повернення події у чергу (унгет) |
|
【Синтаксис / Прототип】
ERR wugt_evt(WEVENT *evt)
【Параметри】
WEVENT *evt Подія для повернення у чергу
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Повертає подію evt до черги, щоб вона була отримана при наступному
виклику wget_evt(). Дозволяє «відкласти» необроблену подію.
【Коди помилок】
EX_ADR : Недопустима адреса evt.
| wsnd_evt |
| Send Event to Window |
| Надсилання події до вікна |
|
【Синтаксис / Прототип】
ERR wsnd_evt(W wid, WEVENT *evt)
【Параметри】
W wid ID вікна-отримувача
WEVENT *evt Подія для надсилання
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Надсилає подію evt до вікна wid. Використовується для
міжпроцесної комунікації через події вікна (наприклад, EV_REQUEST).
【Коди помилок】
EX_ADR : Недопустима адреса evt.
EX_WID : Вікно (wid) не існує.
| wreq_dsp |
| Request Redisplay |
| Запит перемальовування вікна |
|
【Синтаксис / Прототип】
ERR wreq_dsp(W wid)
【Параметри】
W wid ID вікна
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Видає запит на перемальовування вікна wid. Процес-менеджер вікна
отримає подію EV_REDISP при наступному виклику wget_evt().
【Коди помилок】
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан вікна не допускає операцію.
| wrsp_evt |
| Respond to Event Request |
| Відповідь на запит події |
|
【Синтаксис / Прототип】
ERR wrsp_evt(WEVENT *evt, W sts)
【Параметри】
WEVENT *evt Подія-запит (EV_REQUEST), на яку надсилається відповідь
W sts W_ACK = успіх; W_NAK = відмова
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Надсилає відповідь W_ACK або W_NAK на запит
EV_REQUEST (W_PASTE, W_DELETE, W_FINISH).
Відповідь є обов'язковою.
【Коди помилок】
EX_ADR : Недопустима адреса evt.
EX_PAR : Неприпустиме значення evt або sts.
| wwai_rsp |
| Wait for Response |
| Очікування відповіді на запит події |
|
【Синтаксис / Прототип】
W wwai_rsp(WEVENT *evt, W wid, W type)
【Параметри】
WEVENT *evt Буфер для отриманої відповіді
W wid ID вікна-отримувача запиту (0 = будь-яке)
W type Тип запиту (W_PASTE, W_DELETE, W_FINISH тощо)
【Значення, що повертається】
>= 0 Статус відповіді (W_ACK або W_NAK)
< 0 Помилка (Код помилки)
【Детальний опис】
Надсилає запит type до вікна wid та блокується в очікуванні
відповіді W_ACK/W_NAK.
Під час очікування може отримувати та обробляти інші події.
【Коди помилок】
EX_ADR : Недопустима адреса evt.
EX_WID : Вікно (wid) не існує.
EX_PAR : Неприпустиме значення type.
| wsta_dsp |
| Start Redisplay |
| Початок перемальовування вікна |
|
【Синтаксис / Прототип】
W wsta_dsp(W wid, RECT *r, W opt)
【Параметри】
W wid ID вікна
RECT *r Буфер для прямокутника, що потребує перемальовування
W opt 0 = звичайне; != 0 = примусове (навіть якщо перемальовування не потрібне)
【Значення, що повертається】
= 0 Перемальовування не потрібне
= 1 Потрібне перемальовування (r містить область)
< 0 Помилка (Код помилки)
【Детальний опис】
Починає сесію перемальовування вікна wid. При поверненні «1» у r
міститься прямокутник, який потрібно перемалювати. Після перемальовування необхідно
викликати wend_dsp(). Якщо повернуто «0», виклик wend_dsp()
не обов'язковий.
【Коди помилок】
EX_ADR : Недопустима адреса r.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан вікна не допускає операцію.
EX_WPRC : Не є процесом-менеджером вікна.
| wend_dsp |
| End Redisplay |
| Завершення перемальовування вікна |
|
【Синтаксис / Прототип】
W wend_dsp(W wid)
【Параметри】
W wid ID вікна
【Значення, що повертається】
= 0 Нових запитів перемальовування немає
= 1 З'явився новий запит перемальовування (потрібен повторний цикл)
< 0 Помилка (Код помилки)
【Детальний опис】
Оголошує завершення перемальовування і скидає область перемальовування.
Якщо під час перемальовування з'явився новий запит — повертає «1» (потрібен
новий цикл wsta_dsp()~wend_dsp()).
【Коди помилок】
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
EX_WPRC : Не є процесом-менеджером.
| wchk_dsp |
| Check Redisplay Status |
| Перевірка необхідності перемальовування |
|
【Синтаксис / Прототип】
W wchk_dsp(W wid)
【Параметри】
W wid ID вікна (wid = 0 — кількість вікон, що потребують перемальовування)
【Значення, що повертається】
= 0 Перемальовування не потрібне
= 1 Перемальовування потрібне (або кількість вікон при wid=0)
< 0 Помилка (Код помилки)
【Коди помилок】
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
| wchg_dsp |
| Change Display Region |
| Зміна області перемальовування |
|
【Синтаксис / Прототип】
ERR wchg_dsp(W wid, RECT *r, W opt)
【Параметри】
W wid ID вікна
RECT *r Нова область перемальовування (або NULL — скинути)
W opt Режим (0 = замінити; 1 = об'єднати з поточною)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Змінює поточну область перемальовування вікна під час сесії wsta_dsp().
【Коди помилок】
EX_ADR : Недопустима адреса r.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
EX_WPRC : Не є процесом-менеджером.
| wsta_drg |
| Start Drag Operation |
| Початок операції перетягування (D&D) |
|
【Синтаксис / Прототип】
GID wsta_drg(W wid, W lock)
【Параметри】
W wid ID вікна
W lock != 0 = заборонити одночасне малювання в інших вікнах
【Значення, що повертається】
>= 0 ID середовища малювання для D&D тіні
< 0 Помилка (Код помилки)
【Детальний опис】
Починає сесію D&D малювання «тіні». Повертає ID середовища для малювання.
Якщо необхідне малювання за межами вікна — обов'язковий lock != 0.
Виконується ексклюзивно — якщо інший процес вже виконує D&D — помилка EX_DRAG.
【Коди помилок】
EX_DRAG : D&D конфлікт (інший процес вже виконує D&D).
EX_NOSPC: Нестача пам'яті.
EX_WID : Вікно (wid) не існує.
EX_WND : Вікно неактивне.
EX_WPRC : Не є процесом-менеджером.
| wend_drg |
| End Drag Operation |
| Завершення операції перетягування (D&D) |
|
【Синтаксис / Прототип】
ERR wend_drg(void)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Завершує D&D сесію розпочату wsta_drg() і звільняє середовище малювання.
При lock — знімає блокування малювання. Якщо D&D не виконувалась — нічого не робить.
Викликається автоматично при закритті вікна або завершенні процесу.
【Коди помилок】
EX_DRAG : Поточний процес не є ініціатором D&D.
| wget_drg |
| Get Drag Position |
| Отримання поточної позиції вказівника під час D&D |
|
【Синтаксис / Прототип】
W wget_drg(PNT *pos, WEVENT *evt)
【Параметри】
PNT *pos Буфер для поточної позиції вказівника (у координатах D&D середовища)
WEVENT *evt Буфер для події, що виникла під час D&D (або NULL)
【Значення, що повертається】
= 0 Нових подій немає (EV_NULL)
> 0 Тип події, що виникла під час D&D
< 0 Помилка (Код помилки)
【Детальний опис】
Під час D&D сесії повертає поточну позицію вказівника у pos.
Якщо виникла подія (крім EV_REQUEST, EV_SWITCH) — записує у
evt і повертає тип події.
【Коди помилок】
EX_ADR : Недопустима адреса pos або evt.
EX_DRAG : D&D сесія не активна.
| wmov_drg |
| Move Window via Drag |
| Переміщення вікна перетягуванням |
|
【Синтаксис / Прототип】
W wmov_drg(W wid, WEVENT *evt)
【Параметри】
W wid ID вікна
WEVENT *evt Подія, що ініціювала переміщення
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Виконує інтерактивне переміщення вікна wid перетягуванням. Блокується
до відпускання вказівника. Після завершення вікно відображається у новій позиції.
【Коди помилок】
EX_ADR : Недопустима адреса evt.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
EX_WPRC : Не є процесом-менеджером.
| wmov_wnd |
| Move Window Programmatically |
| Переміщення вікна програмно |
|
【Синтаксис / Прототип】
ERR wmov_wnd(W wid, RECT *r)
【Параметри】
W wid ID вікна
RECT *r Нова позиція вікна (абсолютні координати)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Переміщує вікно wid до позиції r без взаємодії з користувачем.
【Коди помилок】
EX_ADR : Недопустима адреса r.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає (наприклад, повноекранний режим).
EX_WPRC : Не є процесом-менеджером.
| wrsz_drg |
| Resize Window via Drag |
| Зміна розміру вікна перетягуванням |
|
【Синтаксис / Прототип】
W wrsz_drg(W wid, WEVENT *evt)
【Параметри】
W wid ID вікна
WEVENT *evt Подія, що ініціювала зміну розміру
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Виконує інтерактивну зміну розміру вікна перетягуванням. Блокується до відпускання.
Після завершення надсилається EV_SWITCH (W_RESIZE) з новими координатами.
【Коди помилок】
EX_ADR : Недопустима адреса evt.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
EX_WPRC : Не є процесом-менеджером.
| wrsz_wnd |
| Resize Window Programmatically |
| Зміна розміру вікна програмно |
|
【Синтаксис / Прототип】
ERR wrsz_wnd(W wid, RECT *r)
【Параметри】
W wid ID вікна
RECT *r Нові розміри (абсолютні координати)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Змінює розмір вікна wid до r без D&D.
【Коди помилок】
EX_ADR : Недопустима адреса r.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
EX_WPRC : Не є процесом-менеджером.
| wchg_wnd |
| Move and Resize Window |
| Одночасне переміщення та зміна розміру вікна |
|
【Синтаксис / Прототип】
ERR wchg_wnd(W wid, RECT *r, W attr)
【Параметри】
W wid ID вікна
RECT *r Новий прямокутник (тип визначається attr)
W attr WA_STD | WA_WORK | WA_FRAME — тип координат r
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Одночасно переміщує та змінює розмір вікна wid. Параметр attr
визначає тип координат: зовнішній прямокутник, робоча зона або зовнішня рамка.
【Коди помилок】
EX_ADR : Недопустима адреса r.
EX_PAR : Неприпустимий attr.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
EX_WPRC : Не є процесом-менеджером.
| wswi_wnd |
| Switch Active Window |
| Переключення активного вікна |
|
【Синтаксис / Прототип】
ERR wswi_wnd(W wid)
【Параметри】
W wid ID вікна, яке стане активним
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Передає фокус введення до вікна wid. Попереднє активне вікно отримує
EV_INACT; нове активне вікно виводиться на передній план.
【Коди помилок】
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає (наприклад, повноекранний режим).
EX_WPRC : Не є процесом-менеджером.
| wscr_wnd |
| Scroll Window Contents |
| Прокручування вмісту вікна |
|
【Синтаксис / Прототип】
W wscr_wnd(W wid, RECT *r, W dh, W dv, RECT *ur)
【Параметри】
W wid ID вікна
RECT *r Область прокручування (NULL = вся робоча зона)
W dh Горизонтальний зсув (пікселі; право = +)
W dv Вертикальний зсув (пікселі; вниз = +)
RECT *ur Буфер для прямокутника, що потребує перемальовування (або NULL)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Прокручує вміст вікна на (dh, dv) пікселів. Повертає у ur
прямокутник, що звільнився і потребує перемальовування.
【Коди помилок】
EX_ADR : Недопустима адреса r або ur.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
EX_WPRC : Не є процесом-менеджером.
| wget_bar |
| Get Scrollbar Event |
| Отримання події смуги прокручування |
|
【Синтаксис / Прототип】
W wget_bar(WEVENT *evt, W *pos, W *len)
【Параметри】
WEVENT *evt Подія натискання на смугу прокручування
W *pos Буфер для нової позиції прокручування
W *len Буфер для кроку прокручування
【Значення, що повертається】
>= 0 Тип прокручування (W_BSCROLL / W_JSCROLL, напрямок)
< 0 Помилка (Код помилки)
【Детальний опис】
Аналізує подію смуги прокручування і повертає тип прокручування, нову позицію
і крок. При W_JSCROLL — інтерактивне перетягування; блокується до відпускання.
【Коди помилок】
EX_ADR : Недопустима адреса evt, pos або len.
EX_PAR : Подія не є подією смуги прокручування.
| wfnd_wnd |
| Find Window at Point |
| Пошук вікна за координатою |
|
【Синтаксис / Прототип】
WID wfnd_wnd(PNT pos, W type)
【Параметри】
PNT pos Абсолютна координата для пошуку
W type Фільтр типу вікна (0 = усі; WA_MAIN = лише головні тощо)
【Значення, що повертається】
> 0 ID знайденого вікна
= 0 Вікно не знайдено
< 0 Помилка (Код помилки)
【Детальний опис】
Шукає вікно, що знаходиться під точкою pos (абсолютні координати).
Враховує Z-порядок; повертає вікно на передньому плані.
【Коди помилок】
EX_PAR : Неприпустиме значення type.
| wlst_wnd |
| List Windows |
| Отримання списку вікон |
|
【Синтаксис / Прототип】
W wlst_wnd(W *buf, W bsz, W type)
【Параметри】
W *buf Буфер для збереження списку ID вікон
W bsz Розмір буфера (кількість W)
W type Фільтр типу (0 = усі; WA_MAIN = лише головні тощо)
【Значення, що повертається】
>= 0 Кількість вікон у списку
< 0 Помилка (Код помилки)
【Детальний опис】
Заповнює buf списком WID всіх вікон зазначеного типу (у Z-порядку зверху вниз).
【Коди помилок】
EX_ADR : Недопустима адреса buf.
EX_PAR : Неприпустиме значення type.
| wget_act |
| Get Active Window |
| Отримання ID активного вікна |
|
【Синтаксис / Прототип】
WID wget_act(W *prc)
【Параметри】
W *prc Буфер для ID процесу-менеджера активного вікна (або NULL)
【Значення, що повертається】
> 0 ID активного вікна
= 0 Немає активного вікна
< 0 Помилка (Код помилки)
【Детальний опис】
Повертає WID поточного активного вікна (що приймає введення). Якщо prc != NULL
— зберігає ID процесу.
【Коди помилок】
EX_ADR : Недопустима адреса prc.
| wget_sts |
| Get Window Status |
| Отримання стану вікна |
|
【Синтаксис / Прототип】
W wget_sts(W wid, WDSTAT *stat, WDDISP *atr)
【Параметри】
W wid ID вікна
WDSTAT *stat Буфер для стану вікна (або NULL)
WDDISP *atr Буфер для атрибутів відображення (або NULL)
【Значення, що повертається】
= 1 Вікно активне (приймає введення)
= 0 Вікно неактивне
< 0 Помилка (Код помилки)
【Детальний опис】
Повертає поточний стан вікна та атрибути відображення. У stat->attr
встановлено WA_FULL для повноекранного режиму; stat->r
містить координати відповідно до WA_STD/WA_WORK/WA_FRAME.
【Коди помилок】
EX_ADR : Недопустима адреса stat або atr.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
| wget_wrk |
| Get Working Rectangle |
| Отримання прямокутника робочої зони |
|
【Синтаксис / Прототип】
ERR wget_wrk(W wid, RECT *r)
【Параметри】
W wid ID вікна
RECT *r Буфер для прямокутника робочої зони (відносні координати)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Повертає поточний прямокутник робочої зони вікна у відносних координатах.
【Коди помилок】
EX_ADR : Недопустима адреса r.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
| wset_wrk |
| Set Working Rectangle |
| Встановлення прямокутника робочої зони |
|
【Синтаксис / Прототип】
ERR wset_wrk(W wid, RECT *r)
【Параметри】
W wid ID вікна
RECT *r Новий прямокутник робочої зони (відносні координати)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Встановлює прямокутник робочої зони вікна (визначає розмір прокрутного вмісту).
【Коди помилок】
EX_ADR : Недопустима адреса r.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
EX_WPRC : Не є процесом-менеджером.
| wget_org |
| Get Scroll Origin |
| Отримання початку координат прокручування |
|
【Синтаксис / Прототип】
ERR wget_org(W wid, PNT *org)
【Параметри】
W wid ID вікна
PNT *org Буфер для початку координат (scroll origin)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Повертає поточне зміщення вмісту вікна (початок координат прокручування).
【Коди помилок】
EX_ADR : Недопустима адреса org.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
| wset_org |
| Set Scroll Origin |
| Встановлення початку координат прокручування |
|
【Синтаксис / Прототип】
ERR wset_org(W wid, PNT org)
【Параметри】
W wid ID вікна
PNT org Нове зміщення вмісту (scroll origin)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Встановлює початок координат вмісту вікна і оновлює позиції смуг прокручування.
【Коди помилок】
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
EX_WPRC : Не є процесом-менеджером.
| wget_gid |
| Get Drawing Environment ID |
| Отримання ID середовища малювання вікна |
|
【Синтаксис / Прототип】
GID wget_gid(W wid)
【Параметри】
W wid ID вікна
【Значення, що повертається】
>= 0 ID середовища малювання (GID)
< 0 Помилка (Код помилки)
【Детальний опис】
Повертає GID вікна wid для використання в графічних примітивах.
【Коди помилок】
EX_WID : Вікно (wid) не існує.
| wget_tit |
| Get Window Title |
| Отримання піктограми та рядка заголовка вікна |
|
【Синтаксис / Прототип】
W wget_tit(W wid, W *pict, TC *title)
【Параметри】
W wid ID вікна
W *pict Буфер для номера піктограми (або NULL)
TC *title Буфер для рядка заголовка (мін. 97 символів + NUL; або NULL)
【Значення, що повертається】
= 0 Нормальне вікно
= 1 Вікно типу «» (Відключене вікно, shadow window)
< 0 Помилка (Код помилки)
【Детальний опис】
Повертає номер піктограми та рядок заголовка вікна. Якщо title = NULL
або pict = NULL — відповідний буфер не заповнюється.
【Коди помилок】
EX_ADR : Недопустима адреса pict або title.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
| wset_tit |
| Set Window Title |
| Зміна заголовка та піктограми вікна |
|
【Синтаксис / Прототип】
ERR wset_tit(W wid, W pict, TC *title, W mode)
【Параметри】
W wid ID вікна
W pict Номер піктограми (< 0 = без зміни)
TC *title Новий рядок заголовка (NULL = без зміни)
W mode 0 = нормальне відображення; != 0 = відображення типу «»
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Змінює піктограму та/або заголовок вікна і оновлює відображення рядка заголовка.
При mode != 0 — вікно відображається у стилі «Відключеного» ().
【Коди помилок】
EX_ADR : Недопустима адреса title.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
| wset_bgp |
| Set Background Pattern |
| Встановлення фонового патерну вікна |
|
【Синтаксис / Прототип】
ERR wset_bgp(W wid, PAT *pat)
【Параметри】
W wid ID вікна
PAT *pat Новий фоновий патерн
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Встановлює фоновий патерн робочої зони вікна. Може змінюватись після відкриття
(на відміну від WDDISP). Розмір патерну повинен відповідати
поточному розміру патерну середовища малювання.
【Коди помилок】
EX_ADR : Недопустима адреса pat.
EX_NOSPC: Нестача пам'яті.
EX_PAR : Неприпустимий вміст pat.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
| wget_bgp |
| Get Background Pattern |
| Отримання фонового патерну вікна |
|
【Синтаксис / Прототип】
W wget_bgp(W wid, PAT *pat, W size)
【Параметри】
W wid ID вікна
PAT *pat Буфер для патерну (NULL — лише отримати розмір)
W size Розмір буфера у байтах
【Значення, що повертається】
>= 0 Фактичний розмір патерну (байт)
< 0 Помилка (Код помилки)
【Детальний опис】
Зберігає фоновий патерн вікна у pat. При pat = NULL
— лише повертає необхідний розмір. При недостатньому size — помилка.
【Коди помилок】
EX_ADR : Недопустима адреса pat.
EX_PAR : size занадто малий.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
| wera_wnd |
| Erase Window Region |
| Заповнення ділянки вікна фоновим патерном |
|
【Синтаксис / Прототип】
ERR wera_wnd(W wid, RECT *r)
【Параметри】
W wid ID вікна
RECT *r Область для заповнення (NULL = вся робоча зона)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Заповнює ділянку r поточним фоновим патерном вікна.
【Коди помилок】
EX_ADR : Недопустима адреса r.
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
EX_WPRC : Не є процесом-менеджером.
| wset_dat |
| Set User Data |
| Встановлення користувацьких даних вікна |
|
【Синтаксис / Прототип】
ERR wset_dat(W wid, W data)
【Параметри】
W wid ID вікна
W data Довільне ціле значення для зберігання в дескрипторі вікна
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Зберігає одне ціле значення data, прив'язане до вікна.
Може бути зчитане через wget_dat(). Корисно для асоціювання
вікна з прикладними даними.
【Коди помилок】
EX_WID : Вікно (wid) не існує.
EX_WPRC : Не є процесом-менеджером.
| wget_dat |
| Get User Data |
| Отримання користувацьких даних вікна |
|
【Синтаксис / Прототип】
W wget_dat(W wid)
【Параметри】
W wid ID вікна
【Значення, що повертається】
Значення, збережене через wset_dat()
< 0 Помилка (Код помилки)
【Детальний опис】
Повертає значення, збережене через wset_dat().
【Коди помилок】
EX_WID : Вікно (wid) не існує.
| wexe_dmn |
| Execute Display Management Menu |
| Виконання меню управління відображенням |
|
【Синтаксис / Прототип】
W wexe_dmn(W wid, WEVENT *evt)
【Параметри】
W wid ID вікна
WEVENT *evt Подія EV_MENU, що ініціювала меню
【Значення, що повертається】
>= 0 Обраний пункт меню (або 0 якщо скасовано)
< 0 Помилка (Код помилки)
【Детальний опис】
Відображає «Меню управління відображенням» (Меню), що містить
команди управління вікном: переміщення, зміна розміру, переключення вікон,
закриття, завершення тощо. Виконує вибраний пункт і повертає код результату.
【Коди помилок】
EX_ADR : Недопустима адреса evt.
EX_PAR : Подія не є EV_MENU; або повноекранний режим (заборонено деякі пункти).
EX_WID : Вікно (wid) не існує.
EX_WPRC : Не є процесом-менеджером.
| wget_dmn |
| Get Display Management Menu Data |
| Отримання даних меню управління відображенням |
|
【Синтаксис / Прототип】
W wget_dmn(W wid, VP buf, W bsz)
【Параметри】
W wid ID вікна
VP buf Буфер для даних меню
W bsz Розмір буфера
【Значення, що повертається】
>= 0 Розмір даних меню
< 0 Помилка (Код помилки)
【Детальний опис】
Отримує дані меню управління відображенням для вікна wid.
Якщо bsz менший необхідного — повертає розмір без запису.
【Коди помилок】
EX_ADR : Недопустима адреса buf.
EX_WID : Вікно (wid) не існує.
| wdef_fep |
| Define Frontend Process |
| Реєстрація/скасування Frontend-процесу |
|
【Синтаксис / Прототип】
ERR wdef_fep(W wid, W mode)
【Параметри】
W wid ID вікна переднього плану (0 = скасувати реєстрацію)
W mode Режим перехоплення подій
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Реєструє поточний процес як Frontend-процес, прив'язаний до вікна переднього плану
wid. Frontend-процес перехоплює вікнові події активного вікна до їх
передачі цільовому процесу. При wid = 0 — скасовує реєстрацію.
【Коди помилок】
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає (не є вікном переднього плану).
EX_LIMIT: Вже зареєстровано максимальна кількість Frontend-процесів.
| wchg_dck |
| Change Dock State |
| Зміна стану «докованого» вікна (вікна з рамкою) |
|
【Синтаксис / Прототип】
ERR wchg_dck(W wid, W mode)
【Параметри】
W wid ID вікна
W mode Новий стан доку (0 = нормальний; != 0 = докований/згорнутий)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Змінює стан «доку» (згортання/мінімізація) для вікна wid.
У докованому стані вікно зберігається лише у вигляді рядка заголовка.
【Коди помилок】
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
EX_WPRC : Не є процесом-менеджером.
| wchk_dck |
| Check Dock State |
| Перевірка стану «доку» вікна |
|
【Синтаксис / Прототип】
W wchk_dck(W wid)
【Параметри】
W wid ID вікна
【Значення, що повертається】
= 0 Нормальний стан
= 1 Докований стан (мінімізований)
< 0 Помилка (Код помилки)
【Коди помилок】
EX_WID : Вікно (wid) не існує.
EX_WND : Тип/стан не допускає.
| wchg_ful |
| Change to Fullscreen Mode |
| Перехід у повноекранний режим |
|
【Синтаксис / Прототип】
ERR wchg_ful(void)
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Після виклику наступне головне вікно того ж процесу автоматично відкривається
у повноекранному режимі (весь екран включно з областю системних повідомлень;
системна панель прихована). Атрибути: без рамки, без заголовка, без смуг
прокручування; переміщення і зміна розміру неможливі.
Поки відкрите повноекранне вікно — інші головні вікна цього процесу відкрити неможливо;
залежні вікна і панелі — можливо.
Вікно з атрибутом WA_SFULL відкривається одразу у повноекранному режимі
(можна декілька); через wchg_ful() — лише одне.
【Коди помилок】
EX_LIMIT: Вже виконується інший процес у повноекранному режимі.
| wcnv_rec |
| Convert Window Rectangle |
| Конвертація типу координат прямокутника вікна |
|
【Синтаксис / Прототип】
ERR wcnv_rec(UW attr, RECT *r, UW opt)
【Параметри】
UW attr Атрибути вихідного вікна (комбінація WA_*)
RECT *r Прямокутник для конвертації (результат записується назад)
UW opt Тип цільових координат: WA_STD | WA_WORK | WA_FRAME
【Значення, що повертається】
= 0 Успішне виконання
< 0 Помилка (Код помилки)
【Детальний опис】
Конвертує прямокутник r між різними системами координат вікна
(нормалізовані WA_STD, робоча зона WA_WORK, зовнішня рамка
WA_FRAME) відповідно до атрибутів attr. Результат
записується назад у r.
Можна виконувати без відкритого вікна. Результат залежить від налаштувань AccessWare.
【Коди помилок】
EX_ADR : Недопустима адреса r.
EX_PAR : Неприпустимі attr або opt.
| wget_inf |
| Get Window Info Record |
| Отримання інформаційного запису вікна |
|
【Синтаксис / Прототип】
ERR wget_inf(W item, VP buf, W size)
【Параметри】
W item Номер інформаційного запису
VP buf Буфер для збереження (NULL або size<=0 — лише отримати розмір)
W size Розмір буфера у байтах
【Значення, що повертається】
>= 0 Розмір запису (байт)
< 0 Помилка (Код помилки)
【Детальний опис】
Зчитує інформаційний запис item у буфер buf.
При buf = NULL або size <= 0 — лише повертає розмір запису.
При недостатньому size — записує size байт, але вміст
може бути неповним (залежно від типу запису).
【Коди помилок】
EX_ADR : Недопустима адреса buf.
EX_PAR : Неприпустимий item.
EX_NOSPT: Запис item не підтримується.
EX_NOSPC: Нестача системної пам'яті.
| wset_inf |
| Set Window Info Record |
| Встановлення інформаційного запису вікна |
|
【Синтаксис / Прототип】
ERR wset_inf(W item, VP buf, W size)
【Параметри】
W item Номер інформаційного запису
VP buf Нові дані (NULL або size<=0 — скинути до системного за замовчуванням)
W size Розмір buf у байтах
【Значення, що повертається】
>= 0 Фактичний обсяг записаних байт
< 0 Помилка (Код помилки)
【Детальний опис】
Оновлює інформаційний запис item вмістом буфера buf.
При buf = NULL або size <= 0 — скидає запис до системного
значення за замовчуванням.
【Коди помилок】
EX_ADR : Недопустима адреса buf.
EX_PAR : Неприпустимі item або вміст buf.
EX_NOSPT: Запис або формат даних не підтримується.
EX_NOSPC: Нестача пам'яті.
Повернутися до змісту розділу Графічної оболонки
Попередня сторінка: Головний зміст Розділу 3 (Повернутися)
Наступна сторінка: 3.2 Менеджер панелей та діалогів (Перейти)