A Windows USER a Windows és a Windows operációs rendszer felhasználói felületének kezelésére szolgáló alrendszer, amely az operációs rendszer három történelmileg első összetevőjének egyike.
Ablakobjektumot (HWND), ablaklistákat valósít meg, beleértve a Z-sorrendet is, és kezeli az ablakkivágási régiókat, és számos hívást tartalmaz az ablakok létrehozásához és kezeléséhez. Megvalósítja egy szabványos ablakkeret (DefWindowProc) és számos szabványos felhasználói felület elem (gombok, jelölőnégyzetek, rádiógombok, görgetősávok, listák, kombinált dobozok és párbeszédpanelek, amelyekben gyermekek vannak) megjelenítését.
Ablak létrehozásakor (két szakasz: RegisterClass+CreateWindow, standard UI elemek használata esetén az első szakasz nem szükséges) a következőket adjuk meg: koordináták, karakterlánc (cím vagy karakterlánc a gomb mellett), stílusjelzők és a szülő ablak. A RegisterClass hívása egy "ablak eljárást" (WNDPROC) is meghatároz.
Egy már létrehozott ablak méretét és Z-sorrendjét speciális hívások szabályozzák. Ami az ablak típusától függő vezérlést illeti (például egy jelölőnégyzet felhúzása / visszaállítása vagy sorok hozzáadása a listához) - ez a SendMessage meghívásával történik, ahol 2 üzenetkód van feltüntetve (például WM_COMMAND+LB_ADDSTRING ) és egy paramétert.
A WNDPROC egy alkalmazásban megvalósított függvény, amelyet a USER hív meg, ha az ablak életében különböző események következnek be (a szabványos UI-elemeknél a funkció magában a USER-ben vagy abban a DLL-ben, ahol az objektum megvalósul, például COMCTL32.DLL ). A WNDPROC HWND, üzenetkód ( WM_xxx) és 2 paraméter van átadva.
A WNDPROC fejlesztő felelőssége, hogy kihagyja a számára ismeretlen üzenetkódokat a DefWindowProc-ban.
Fő üzenetek:
A USER aktívan használja az ún. Az erőforrások csak olvasható adatok, amelyeket speciális módon az építési szakaszban egy EXE/DLL fájlba ágyaznak be.
Maguk az erőforrások nem részei a USER-nek, és anélkül is használhatók (például stringtable - karakterlánc-táblázatok egy alkalmazás különböző nyelvekre történő lokalizálásához), azonban bizonyos típusú erőforrásokat a FELHASZNÁLÓ automatikusan használ (például menük leírása, ill. párbeszédpanelek, amelyek felsorolják például a párbeszédpanel összes belső vezérlőelemét, valamint azok koordinátáit és vonalait).
A program fejlesztése során az erőforrásokat egy .rc utótagú szövegfájlba helyezik, amely valamilyen egyszerű nyelven van megírva. Ugyanakkor nagyon régen léteztek eszközök a párbeszédablakok és menük leírásának vizuális szerkesztésére.
A program összeállításakor az RC.EXE fordító bináris .res fájllá fordítja le az .rc fájlt, amelyet aztán a LINK program EXE / DLL fájllá varr.
Ablak létrehozásakor megadhatja annak az erőforrásnak a fogantyúját, ahol az ablak felső menüjének leírása található - és a FELHASZNÁLÓ automatikusan létrehozza és megrajzolja a menüt, és elküldi a WM_COMMAND-ot a menüelem kódjával, amikor az elem ki van választva.
A legnépszerűbb C++ burkoló a USER körül már régóta az MFC , és még ma is használatban van. A WTL burkoló is népszerű .
A teljes, mintegy 25 éves USER technológiát fokozatosan felváltja a Windows Presentation Foundation ( WPF ), amelyben például az erőforrás nyelvét egy sokkal gazdagabb XAML , és bármilyen vektorgrafikus elemet vagy akár egy Az ablak olyan objektum lehet, amely eseményeket fogadhat a DirectShow -n keresztül bemutatott filmmel .
win32k.sys (alacsonyabb szintek, beleértve az ablakok és vágási régióik listáját) és a user32.dll (alkalmazás-elérhető hívások, DefWindowProc és szabványos elemek).
Egyes állítások szerint (azoktól, akik látták az illegális forráskódot), a USER forráskód szörnyű stílusban van megírva, és kisebb módosításokat tartalmaz bizonyos alkalmazások, például a PowerPoint támogatása érdekében .
Ugyanígy ezt a kódot 25 év alatt soha többé nem írták át, és ez talán irreális feladat az alkalmazás-kompatibilitás fenntartása szempontjából.
Ezenkívül vannak olyan megfontolások, amelyek nem igényelnek információt az illegális kódból.
A WNDPROC használata switch utasítással az összes üzenetkódhoz rendkívül csúnyán néz ki (ez a probléma minden C++ wrapperben megoldott).
Létezik egy kliens és egy nem ügyfél terület fogalma az ablakban - az ablak belseje és a keret (általában szabvány). Ez két üzenetkód-készletet eredményez a belső és a keret számára – renderelés, billentyűzet, egér stb. Ezen túlmenően a keret és a belső tér nem választja el egymástól architekturálisan, ami megnehezíti az MVC architektúra elveinek megvalósítását .
A probléma azonban már az MFC-ben is megoldott: külön belső ablak jön létre, ami a keret mozgatásakor automatikusan elmozdul, és amibe minden berajzolódik, amit az alkalmazás meg akar rajzolni. A belső ablakot nézetnek hívják, és ebben az architektúrában az MVC már könnyen megvalósítható. Egy ilyen nézet például újrafelhasználható az OLE technológia segítségével egy beágyazott dokumentumban.
A magyar jelölést először a USER-ben használták – a jelölés kitalálója, Charles Simonyi volt ennek a komponensnek a fő fejlesztője.
A UNIX-szerű operációs rendszerekben, például a Linuxban használt X11 technológia felső szintjei , valamint a KDE és Gnome technológiák alsó szintjei (ugyanabban az operációs rendszerben).