Юзер

Матеріал з Словник з інформатики
Перейти до: навігація, пошук

User - це клієнтське додаток, що використовує певний мережевий протокол. Термін зазвичай використовується для додатків, які здійснюють доступ до веб-сайтів, таким як браузери, пошукові роботи (та інші «павуки»), мобільні телефони та інші пристрої.

При відвідуванні веб-сайту клієнтську програму зазвичай посилає веб-серверу інформацію про себе. Це текстова рядок, що є частиною HTTP запиту, що починається з User-agent: або User-Agent:, і зазвичай включає таку інформацію, як назва і версію програми, операційну систему комп'ютера і мову. У «павуків» цей рядок часто містить URL і email-адресу, за яким веб-майстер може зв'язатися з оператором «павука».

         Використання веб-сайтами 

Через домінування окремих браузерів в різні періоди в історії всесвітньої павутини багато веб-сайти проектувалися не у відповідності зі стандартами W3C і IETF, а для роботи з певним браузером. Такі сайти посилають різний вміст веб-сторінки в залежності від одержуваного від клієнта значення User-Agent. Це призводить до того, що використовувати сайт можна за допомогою тільки одного-трьох найпопулярніших браузерів, а браузери, які мають трохи відрізняється ідентифікатор, виявляються «забороненими».

Багато веб-майстри вважають такий підхід поганою практикою і рекомендують створювати HTML-розмітку настільки стандартизовано, наскільки це можливо, щоб коректно відображати сторінки сайту на максимальній кількості браузерів.

Веб-сайти для мобільних телефонів часто змушені жорстко покладатися на визначення User-Agent, так як браузери на різних мобільних телефонах занадто різні. Тому мобільні веб-портали зазвичай генерують різні сторінки залежно від моделі мобільного телефону. Ці відмінності можуть бути як невеликими (зміна розміру зображень спеціально для менших екранів), так і вельми істотними (формат WML замість XHTML).

Рядок User-agent також використовується веб-майстрами для запобігання індексування «пошуковими павуками» деяких сторінок сайту, наприклад коли індексування певних сторінок не має сенсу або конкретний «павук» використовує занадто багато трафіку. Веб-майстер може використовувати спеціальний файл robots.txt для рекомендацій «павука» або просто налаштувати веб-сайт не віддавати «павука» ці сторінки.

         Короткий опис 

Реалізує об'єкт «вікно» (HWND), списки вікон, в тому числі по Z-orderу, і управління регіонами відсікання вікон, має багатий набір викликів щодо створення та управління вікнами. Також реалізує отрисовку стандартної рамки вікна (DefWindowProc) і кілька стандартних елементів інтерфейсу користувача (кнопки, чекбокси, радіо-кнопки, смуги прокрутки, списки, комбобокси і діалогові вікна з нащадками всередині).

При створенні вікна (два етапи: RegisterClass + CreateWindow, при використанні стандартних елементів UI не потрібен перший етап) вказується: координати, рядок (заголовок, або рядок поряд з кнопкою), прапори стилю і вікно-батько. У виклику RegisterClass також зазначається «віконна процедура» (WNDPROC).

Управління розмірами і Z-orderом вже створеного вікна проводиться спеціальними викликами. Що ж до управління, залежного від різновиду вікна (наприклад, взвод / скидання чекбокса, або додавання рядків в список) - воно здійснюється викликом SendMessage, де вказуються 2 коду повідомлення (наприклад, WM_COMMAND + LB_ADDSTRING) і параметр.

WNDPROC являє собою функцію, реалізовану в додатку, яку USER викликає при настанні різних подій у житті вікна (для стандартних елементів UI функція реалізована в самому USER або ж в DLL, де реалізовано об'єкт, такий, як COMCTL32.DLL). У WNDPROC передається HWND, код повідомлення (WM_xxx) і 2 параметра.

Розробник WNDPROC зобов'язаний пропустити всі невідомі йому коди повідомлень в DefWindowProc.

Найголовніші повідомлення:

WM_PAINT. «Перемалюю себе». WNDPROC зобов'язана покликати BeginPaint, отримати HDC, і перемалювати вікно (або його «брудну» частина) викликами GDI. WM_CREATE. Одне з перших повідомлень, що посилаються вікну (аналог конструктора). WM_DESTROY. Одне з останніх повідомлень, що посилаються вікну (аналог деструктора).


WM_MOUSEMOVE, WM_LBUTTONDOWN та інші - над вікном провели мишею або ж ткнули в нього мишею. WM_KEYDOWN і WM_CHAR - вікно має «фокус введення» і була натиснута клавіша клавіатури. Всі клавіші приходять в WM_KEYDOWN у вигляді «кодів віртуальних клавіш», які є скан-коди (вони ж - порядкові номери - Esc 1, F1 +2 і так далі) клавіш якоїсь стандартної клавіатури. У WM_CHAR приходять тільки ті натискання клавіш, які означають символ (F1, стрілки, PgUp / Dn - не приходять). WM_SETFOCUS - зміна вікна, що має «фокус введення» (одне на екрані). Використовується для малювання пунктирною рамочки навколо чекбоксів і так далі.

Вся технологія USER, якій близько 25 років, поступово замінюється на Windows Presentation Foundation (WPF), в якій, наприклад, мова ресурсів замінений на куди більш багатий XAML, а об'єктом, якому можуть приходити події, може бути будь-який елемент векторної графіки або навіть вікно з фільмом, показуваним через DirectShow.


За деякими твердженнями (від тих, хто бачив нелегальний вихідний код), вихідний код USER написаний в жахливому стилі, і містить в собі дрібні правки для підтримки конкретних програм, таких, як PowerPoint.

З тих же твердженнями, цей код ніколи не листувався заново за 25 років і, можливо, це нереальне завдання з точки зору збереження сумісності для додатків.

Крім цього, є й міркування, які не потребують інформації з нелегального коду.

Використання WNDPROC з оператором switch на всі коди повідомлень виглядає вкрай непривабливо (ця проблема вирішена в усіх Сі + + обгортках).

Існує концепція client і non-client area у вікні - внутрішність вікна і рамка (зазвичай стандартна). Це призводить до наявності двох наборів кодів повідомлень для нутрощі і рамки - отрисовка, клавіатура, миша і т. д. Крім того, немає архітектурного поділу рамки і нутрощі, що призводить до складності в реалізації архітектурних принципів MVC.

Проте вже в MFC проблема вирішена: створюється окреме вікно-внутрішність, яке автоматично переміщається при переміщенні рамки і в якому і малюється все те, що хоче намалювати додаток. Вікно-внутрішність називається view, і в цій архітектурі MVC вже легко можна реалізувати. Таке view можна, наприклад, повторно використовувати за технологією OLE у вкладеному документі.


         Ресурси 

USER активно використовує т. н. ресурси - дані тільки для читання, вшиті в EXE / DLL файл спеціальним чином на етапі побудови.

Самі по собі ресурси не є частина USER і можуть використовуватися і без нього (наприклад, stringtable - таблиці рядків для локалізації програми на різні мови), проте деякі типи ресурсів використовуються USER автоматично (наприклад, опису меню і діалогових вікон, в яких перераховані, наприклад , всі внутрішні органи управління на даному діалозі і їх координати і рядка).

При розробці програми ресурси поміщаються в текстовий файл з суфіксом. Rc, написаний на такому собі нескладному мовою. При цьому давним-давно є засоби візуального редагування описів діалогів і меню.

При побудові програми компілятор RC.EXE компілює. Rc в бінарний файл. Res, який потім вшивається в EXE / DLL файл програмою LINK.

При створенні вікна можна вказати handle ресурсу, де розташоване опис верхнього меню вікна - і USER створить і Отріс меню автоматично, і пошле WM_COMMAND з кодом пункту меню вікна, коли пункт вибраний.