Windows USER este un subsistem pentru gestionarea ferestrelor și a interfeței cu utilizatorul a sistemului de operare Windows , una dintre primele trei componente istorice ale acestui sistem de operare.
Implementează un obiect fereastră (HWND), liste de ferestre, inclusiv după ordinea Z și gestionarea regiunilor de tăiere a ferestrelor, are un set bogat de apeluri pentru crearea și gestionarea ferestrelor. De asemenea, implementează redarea unui cadru de fereastră standard (DefWindowProc) și a mai multor elemente standard ale interfeței utilizator (butoane, casete de selectare, butoane radio, bare de defilare, liste, casete combinate și casete de dialog cu copii înăuntru).
Când se creează o fereastră (două etape: RegisterClass+CreateWindow, când se utilizează elemente standard UI, prima etapă nu este necesară) se specifică următoarele: coordonate, șir (titlu sau șir de lângă buton), steaguri de stil și părintele fereastră. Apelul către RegisterClass specifică și o „procedură fereastră” (WNDPROC).
Dimensiunea și ordinea Z a unei ferestre deja create sunt controlate de apeluri speciale. În ceea ce privește controlul care depinde de tipul de fereastră (de exemplu, armarea / resetarea unei casete de selectare sau adăugarea de linii la listă) - se efectuează apelând SendMessage, unde sunt indicate 2 coduri de mesaj (de exemplu, WM_COMMAND+LB_ADDSTRING ) și un parametru.
WNDPROC este o funcție implementată în aplicație pe care USER o apelează atunci când au loc diverse evenimente în viața ferestrei (pentru elementele UI standard, funcția este implementată în USER însuși sau în DLL-ul unde este implementat obiectul, cum ar fi COMCTL32.DLL ). WNDPROC primește HWND, codul de mesaj ( WM_xxx) și 2 parametri.
Este responsabilitatea dezvoltatorului WNDPROC să omite orice coduri de mesaj necunoscute de el în DefWindowProc.
Mesaje principale:
UTILIZATORUL folosește în mod activ așa-numitul. resursele sunt date numai pentru citire încorporate într-un fișier EXE/DLL într-un mod special în etapa de construcție.
Resursele în sine nu fac parte din UTILIZATOR și pot fi folosite fără acesta (de exemplu, stringtable - tabele de șiruri pentru localizarea unei aplicații în diferite limbi), cu toate acestea, unele tipuri de resurse sunt utilizate automat de către UTILIZATOR (de exemplu, descrierile meniurilor și casete de dialog care listează, de exemplu, toate controalele interne din acest dialog și coordonatele și liniile acestora).
La dezvoltarea unui program, resursele sunt plasate într-un fișier text cu sufixul .rc, scris într-un limbaj simplu. În același timp, cu mult timp în urmă existau instrumente pentru editarea vizuală a descrierilor dialogurilor și meniurilor.
La construirea unui program, compilatorul RC.EXE compilează .rc într-un fișier binar .res, care este apoi cusut într-un fișier EXE / DLL de către programul LINK.
Când creați o fereastră, puteți specifica mânerul resursei în care se află descrierea meniului de sus al ferestrei - iar USER va crea și va desena automat meniul și va trimite WM_COMMAND cu codul elementului de meniu către fereastră atunci când articolul este selectat.
Cel mai popular wrapper C++ din jurul USER a fost MFC de mult timp și este încă în uz astăzi. Învelișul WTL este, de asemenea, popular .
Întreaga tehnologie USER, care are aproximativ 25 de ani, este înlocuită treptat de Windows Presentation Foundation ( WPF ), în care, de exemplu, limbajul de resurse a fost înlocuit cu un XAML mult mai bogat și orice element de grafică vectorială sau chiar un fereastra poate fi un obiect care poate primi evenimente cu un film afișat prin DirectShow .
win32k.sys (nivelurile inferioare, inclusiv listele de ferestre și regiunile lor de tăiere) și user32.dll (apeluri accesibile aplicației, DefWindowProc și elemente standard).
Conform unor afirmații (de la cei care au văzut codul sursă ilegal), codul sursă UTILIZATOR este scris într-un stil monstruos și conține modificări minore pentru a sprijini aplicații specifice, cum ar fi PowerPoint .
În același mod, acest cod nu a mai fost rescris în 25 de ani și poate că aceasta este o sarcină nerealistă în ceea ce privește menținerea compatibilității aplicațiilor.
În plus, există considerente care nu necesită informații din codul ilegal.
Utilizarea WNDPROC cu o instrucțiune switch pentru toate codurile de mesaj pare extrem de urâtă (această problemă este rezolvată în toate pachetele C++).
Există un concept de client și o zonă non-client într-o fereastră - interiorul ferestrei și cadrul (de obicei standard). Rezultă două seturi de coduri de mesaj pentru interior și cadru - randare, tastatură, mouse, etc. În plus, nu există o separare arhitecturală a cadrului și interiorului, ceea ce face dificilă implementarea principiilor arhitecturale MVC .
Cu toate acestea, problema este deja rezolvată în MFC: este creată o fereastră interioară separată, care se mișcă automat atunci când cadrul este mutat și în care este desenat tot ceea ce dorește aplicația să deseneze. Fereastra din interior se numește vizualizare, iar în această arhitectură, MVC este deja ușor de implementat. O astfel de vizualizare poate fi, de exemplu, reutilizată folosind tehnologia OLE într-un document imbricat.
Notația maghiară a fost folosită pentru prima dată în USER - inventatorul notației, Charles Simonyi, a fost principalul dezvoltator al acestei componente.
Nivelurile superioare ale tehnologiei X11 utilizate în sistemele de operare asemănătoare UNIX, cum ar fi Linux , precum și nivelurile inferioare ale tehnologiilor KDE și Gnome (în aceleași sisteme de operare).