Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Альтернативы
Недавние
Show all languages
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Из Википедии — свободной энциклопедии

Windows USER — подсистема управления окнами и пользовательским интерфейсом операционной системы Windows, одна из трех исторически первых компонент этой ОС.

Краткое описание

Реализует объект «окно» (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 активно использует т. н. ресурсы — данные только для чтения, вшитые в EXE/DLL файл специальным образом на этапе построения.

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

При разработке программы ресурсы помещаются в текстовый файл с суффиксом .rc, написанный на некоем несложном языке. При этом давным-давно есть средства визуального редактирования описаний диалогов и меню.

При построении программы компилятор RC.EXE компилирует .rc в бинарный файл .res, который потом вшивается в EXE/DLL файл программой LINK.

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

Обёртки

Наиболее популярной Си++ обёрткой вокруг USER долгое время являлась MFC — используется по сей день. Также популярна обёртка WTL.

Замена

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

Реализация

win32k.sys (нижние уровни, в том числе списки окон и их регионы отсечения) и user32.dll (доступные приложениям вызовы, DefWindowProc и стандартные элементы).

Критика

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

По тем же утверждениям, этот код никогда не переписывался заново за 25 лет и, возможно, это нереальная задача с точки зрения сохранения совместимости для приложений.

Помимо этого, есть и соображения, не требующие информации из нелегального кода.

Использование WNDPROC с оператором switch на все коды сообщений выглядит крайне некрасиво (эта проблема решена во всех Си++ обертках).

Существует концепция client и non-client area в окне — внутренность окна и рамка (обычно стандартная). Это приводит к наличию двух наборов кодов сообщений для внутренности и рамки — отрисовка, клавиатура, мышь и т. д. Кроме того, нет архитектурного разделения рамки и внутренности, что приводит к сложности в реализации архитектурных принципов MVC.

Однако уже в MFC проблема решена: создается отдельное окно-внутренность, которое автоматически перемещается при перемещении рамки и в котором и рисуется все то, что хочет нарисовать приложение. Окно-внутренность называется view, и в этой архитектуре MVC уже легко реализуема. Такое view можно, например, повторно использовать по технологии OLE во вложенном документе.

Интересные факты

Венгерская нотация впервые применена в USER — изобретатель нотации Чарлз Симони был главным разработчиком этой компоненты.

Примерные аналоги

Верхние уровни технологии X11, используемой в UNIX-подобных ОС, таких, как Linux, а также нижние уровни технологий KDE и Gnome (в этих же ОС).

См. также

Примечания

Литература

Ссылки

Эта страница в последний раз была отредактирована 9 февраля 2023 в 18:30.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).