Windows USER je podsystém pro správu oken a uživatelského rozhraní operačního systému Windows , jedné ze tří historicky prvních součástí tohoto OS.
Implementuje objekt okna (HWND), seznamy oken, včetně Z-pořadí, a správu oblastí ořezávání oken, má bohatou sadu volání pro vytváření a správu oken. Implementuje také vykreslování standardního okenního rámu (DefWindowProc) a několik standardních prvků uživatelského rozhraní (tlačítka, zaškrtávací políčka, přepínače, posuvníky, seznamy, pole se seznamem a dialogová okna s dětmi uvnitř).
Při vytváření okna (dvě fáze: RegisterClass+CreateWindow, při použití standardních prvků uživatelského rozhraní není první fáze potřeba) se zadává následující: souřadnice, řetězec (nadpis nebo řetězec vedle tlačítka), příznaky stylu a nadřazený prvek okno. Volání RegisterClass také určuje "procedura okna" (WNDPROC).
Velikost a Z-pořadí již vytvořeného okna se řídí speciálními voláními. Pokud jde o ovládání, které závisí na typu okna (například natažení / resetování zaškrtávacího políčka nebo přidání řádků do seznamu) - provádí se voláním SendMessage, kde jsou uvedeny 2 kódy zpráv (například WM_COMMAND+LB_ADDSTRING ) a parametr.
WNDPROC je funkce implementovaná v aplikaci, kterou USER volá, když během života okna nastanou různé události (u standardních prvků uživatelského rozhraní je funkce implementována v samotném USER nebo v knihovně DLL, kde je objekt implementován, například COMCTL32.DLL ). WNDPROC je předán HWND, kód zprávy ( WM_xxx) a 2 parametry.
Je odpovědností vývojáře WNDPROC přeskočit jakékoli kódy zpráv, které v DefWindowProc nezná.
Hlavní zprávy:
UŽIVATEL aktivně využívá tzv. prostředky jsou data pouze pro čtení vložená do souboru EXE/DLL zvláštním způsobem ve fázi konstrukce.
Zdroje samotné nejsou součástí USER a lze je používat i bez něj (například stringtable - tabulky řetězců pro lokalizaci aplikace do různých jazyků), nicméně některé typy zdrojů používá UŽIVATEL automaticky (například popisy nabídek a dialogová okna, která obsahují například seznam všech vnitřních ovládacích prvků v tomto dialogu a jejich souřadnice a čáry).
Při vývoji programu jsou zdroje umístěny do textového souboru s příponou .rc napsaného v nějakém jednoduchém jazyce. Přitom již dávno existovaly nástroje pro vizuální úpravu popisů dialogů a nabídek.
Při sestavování programu kompilátor RC.EXE zkompiluje .rc do binárního souboru .res, který je pak programem LINK všit do souboru EXE / DLL.
Při vytváření okna můžete zadat popisovač zdroje, kde se nachází popis horní nabídky okna - a USER vytvoří a nakreslí nabídku automaticky a odešle WM_COMMAND s kódem položky nabídky do okna, když položka je vybrána.
Nejoblíbenějším obalem C++ kolem USER je již dlouhou dobu MFC a používá se dodnes. Oblíbený je také obal WTL .
Celou technologii USER, která je stará asi 25 let, postupně nahrazuje Windows Presentation Foundation ( WPF ), ve které byl například zdrojový jazyk nahrazen mnohem bohatším XAML a libovolný vektorový grafický prvek nebo dokonce window může být objekt, který může přijímat události s filmem zobrazeným prostřednictvím DirectShow .
win32k.sys (nižší úrovně, včetně seznamů oken a jejich oblastí oříznutí) a user32.dll (volání přístupná aplikacím, DefWindowProc a standardní prvky).
Podle některých tvrzení (od těch, kteří viděli nelegální zdrojový kód), je zdrojový kód UŽIVATEL napsán monstrózním stylem a obsahuje drobné úpravy pro podporu specifických aplikací, jako je PowerPoint .
Ze stejného důvodu nebyl tento kód za 25 let již nikdy přepsán a možná je to nereálný úkol z hlediska zachování kompatibility aplikací.
Navíc existují úvahy, které nevyžadují informace z nelegálního kódu.
Použití WNDPROC s příkazem switch pro všechny kódy zpráv vypadá extrémně ošklivě (tento problém je vyřešen ve všech obalech C++).
V okně je koncept klientské a neklientské oblasti - vnitřní strana okna a rám (obvykle standardní). Výsledkem jsou dvě sady kódů zpráv pro vnitřek a rám – vykreslování, klávesnice, myš atd. Kromě toho neexistuje žádné architektonické oddělení rámce a vnitřku, což ztěžuje implementaci architektonických principů MVC .
Problém je však již v MFC vyřešen: je vytvořeno samostatné vnitřní okno, které se automaticky posouvá při posunu rámečku a do kterého se kreslí vše, co chce aplikace nakreslit. Okno uvnitř se nazývá pohled a v této architektuře je MVC již snadno implementovatelné. Takový pohled lze například znovu použít pomocí technologie OLE ve vnořeném dokumentu.
Maďarská notace byla poprvé použita v USER - vynálezce notace Charles Simonyi byl hlavním vývojářem této komponenty.
Vyšší úrovně technologie X11 používané v operačních systémech podobných UNIXu, jako je Linux , a také nižší úrovně technologií KDE a Gnome (ve stejných operačních systémech).