Windows ANVÄNDARE

Windows USER  är ett undersystem för hantering av Windows och användargränssnittet för Windows -operativsystemet , en av de tre historiskt sett första komponenterna i detta operativsystem.

Kort beskrivning

Den implementerar ett fönsterobjekt (HWND), listor över fönster, inklusive i Z-ordning, och hantering av fönsterklippsregioner, har en rik uppsättning anrop för att skapa och hantera fönster. Den implementerar också rendering av en standardfönsterram (DefWindowProc) och flera vanliga användargränssnittselement (knappar, kryssrutor, radioknappar, rullningslistor, listor, kombinationsrutor och dialogrutor med barn inuti).

När du skapar ett fönster (två steg: RegisterClass+CreateWindow, när du använder standardelement i användargränssnittet behövs inte det första steget) anges följande: koordinater, sträng (titel eller sträng bredvid knappen), stilflaggor och föräldern fönster. Anropet till RegisterClass specificerar också en "fönsterprocedur" (WNDPROC).

Storleken och Z-ordningen för ett redan skapat fönster styrs av specialanrop. När det gäller kontrollen som beror på typen av fönster (till exempel spänna / återställa en kryssruta eller lägga till rader i listan) - den utförs genom att anropa SendMessage, där 2 meddelandekoder indikeras (till exempel WM_COMMAND+LB_ADDSTRING ) och en parameter.

WNDPROC är en funktion implementerad i applikationen som USER anropar när olika händelser inträffar i fönstrets livslängd (för vanliga UI-element implementeras funktionen i USER själv eller i DLL:n där objektet är implementerat, såsom COMCTL32.DLL ). WNDPROC skickas HWND, meddelandekod ( WM_xxx) och 2 parametrar.

Det är WNDPROC-utvecklarens ansvar att hoppa över alla meddelandekoder som är okända för honom i DefWindowProc.

Huvudmeddelanden:

Resurser

ANVÄNDARE använder aktivt den sk. resurser är skrivskyddade data inbäddade i en EXE/DLL-fil på ett speciellt sätt i konstruktionsstadiet.

Resurser i sig är inte en del av USER och kan användas utan den (till exempel strängtabell - tabeller med strängar för att lokalisera en applikation till olika språk), men vissa typer av resurser används automatiskt av USER (till exempel beskrivningar av menyer och dialogrutor som listar, till exempel, alla interna kontroller i den här dialogrutan och deras koordinater och linjer).

När man utvecklar ett program placeras resurser i en textfil med suffixet .rc, skrivet på något enkelt språk. Samtidigt fanns det för länge sedan verktyg för att visuellt redigera beskrivningar av dialoger och menyer.

När du bygger ett program kompilerar RC.EXE-kompilatorn .rc till en binär .res-fil, som sedan sys in i en EXE/DLL-fil av LINK-programmet.

När du skapar ett fönster kan du ange handtaget för resursen där beskrivningen av fönstrets översta meny finns - och ANVÄNDAREN kommer att skapa och rita menyn automatiskt och skicka WM_COMMAND med koden för menyalternativet till fönstret när objektet är valt.

Wraps

Det mest populära C++-omslaget runt USER har varit MFC under lång tid  och används fortfarande idag. WTL- omslaget är också populärt .

Ersättning

Hela USER-tekniken, som är cirka 25 år gammal, ersätts gradvis av Windows Presentation Foundation ( WPF ), där till exempel resursspråket har ersatts av ett mycket rikare XAML , och alla vektorgrafikelement eller till och med ett window kan vara ett objekt som kan ta emot händelser med en film som visas via DirectShow .

Implementering

win32k.sys (lägre nivåer, inklusive listor över fönster och deras urklippsområden) och user32.dll (anrop som är tillgängliga för program, DefWindowProc och standardelement).

Kritik

Enligt vissa påståenden (från de som har sett den olagliga källkoden) är USER-källkoden skriven i en monstruös stil och innehåller mindre ändringar för att stödja specifika applikationer som PowerPoint .

På samma sätt har den här koden aldrig skrivits om igen på 25 år, och kanske är detta en orealistisk uppgift när det gäller att upprätthålla applikationskompatibilitet.

Dessutom finns det överväganden som inte kräver information från olaglig kod.

Att använda WNDPROC med en switch-sats för alla meddelandekoder ser extremt fult ut (det här problemet är löst i alla C++-omslag).

Det finns ett koncept av en klient och ett icke-klientområde i ett fönster - insidan av fönstret och ramen (vanligtvis standard). Detta resulterar i två uppsättningar meddelandekoder för insidan och ramen - rendering, tangentbord, mus, etc. Dessutom finns det ingen arkitektonisk separation mellan ramen och insidan, vilket gör det svårt att implementera MVC- arkitektoniska principer .

Problemet är dock redan löst i MFC: ett separat inre fönster skapas, som automatiskt flyttas när ramen flyttas, och där allt som applikationen vill rita ritas. Fönstret inuti kallas view, och i denna arkitektur är MVC redan lätt att implementera. En sådan vy kan till exempel återanvändas med OLE-teknik i ett kapslat dokument.

Intressanta fakta

Ungersk notation användes först i USER - uppfinnaren av notationen, Charles Simonyi, var huvudutvecklaren av denna komponent.

Ungefärliga analoger

De övre nivåerna av X11 -teknik som används i UNIX-liknande operativsystem som Linux , såväl som de lägre nivåerna av KDE- och Gnome-teknologier (i samma operativsystem).

Se även

Anteckningar

Litteratur

Länkar