Специфікація BTRON3 (Український переклад) | Розділ 7: Графічна оболонка (GUI Shell)
Повернутися до змісту розділу Графічної оболонки
Попередня сторінка: Головний зміст Розділу 3 (Повернутися)
Наступна сторінка: 3.2 Менеджер панелей та діалогів (Перейти)

3.1 Менеджер вікон (Window Manager)

3.1.1 Огляд підсистеми Менеджера вікон

3.1.1.1 Загальні відомості

Менеджер вікон ядра BTRON3 керує багатовіконним середовищем робочого столу: перекриттям вікон у Z-стеку, переміщенням, зміною розмірів, обробкою фокусу введення та графічними елементами рамки (заголовок Titlebar, кнопки управління, смуги прокручування Scrollbars).

Кожне вікно ідентифікується унікальним системним дескриптором WID та прив'язується до власника-процесу.

3.1.1.2 Типи вікон

Менеджер вікон підтримує такі типи вікон:

Головне вікно (Вікно)
Стандартне вікно прикладної програми.
Залежне вікно (Вікно)
Підпорядковане головному; може бути відкрите лише активним процесом.
Вікно переднього плану (Вікно)
Завжди поверх інших; може відкривати лише Frontend-процес.
Внутрішнє вікно (Вікно)
Пов'язує ID середовища малювання з WID без управління рамкою; лише кілька операцій доступні.
Панельне вікно (Вікно)
Захоплює фокус введення для показу діалогів і панелей; не підтримує переміщення/зміну розміру.

3.1.1.3 Атрибути вікна (WDATTR)

При відкритті вікна 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 = колір за замовчуванням. Значення за замовчуванням змінюються менеджером і впливають на всі подальші вікна з атрибутами за замовчуванням.

3.1.1.4 Форма вказівника (курсора)

Форма вказівника автоматично змінюється Менеджером вікон залежно від положення (зона ручки, смуга прокручування, піктограма, робоча зона тощо). Прикладна програма не повинна змінювати форму вказівника поза робочою зоною активного вікна; у робочій зоні — зобов'язана встановлювати форму самостійно.

3.1.1.5 Операції з вікнами

Вікна підтримують такі операції (реалізація Менеджером вікон + прикладна програма): відкриття, закриття, переміщення, зміна розміру, згортання, активація (передача фокуса), прокручування вмісту, перемальовування, D&D між вікнами.

3.1.1.6 Вікнові події (WEVENT / EV_*)

Менеджер вікон формує події для прикладних програм через 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 зарезервовані Менеджером вікон — прикладним програмам їх використовувати заборонено.

3.1.1.7 Функція переднього плану (Frontend)

Спеціальний Frontend-процес може перехоплювати події вікна для попередньої обробки (наприклад, «Екранна клавіатура»). Реєстрація через wdef_fep().

3.1.2 Системні виклики Менеджера вікон

Усі функції повертають від'ємний код при помилці, «0» або «+» при успіху.

wopn_wnd
Open Window
Відкриття вікна (головного або переднього плану)

【Синтаксис / Прототип】

WID wopn_wnd(RECT *r, W org, TC *title, PAT *bgpat, WDATTR attr, WDDISP *atr)

【Параметри】

RECT*r Початковий прямокутник вікна у абсолютних координатах.
Worg ID батьківського/головного вікна (залежне вікно) або 0.
TC*title Рядок заголовка вікна (TRON Code).
PAT*bgpat Фоновий патерн робочої зони (NULL = за замовчуванням).
WDATTRattr Атрибути вікна (комбінація 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 Менеджер панелей та діалогів (Перейти)