Windowsin KÄYTTÄJÄ

Windows USER  on alijärjestelmä ikkunoiden ja Windows -käyttöjärjestelmän käyttöliittymän hallintaan , yksi tämän käyttöjärjestelmän kolmesta historiallisesti ensimmäisestä osasta.

Lyhyt kuvaus

Se toteuttaa ikkunaobjektin (HWND), ikkunoiden luettelot, mukaan lukien Z-järjestyksessä, ja ikkunan leikkausalueiden hallinnan, ja siinä on runsaasti kutsuja ikkunoiden luomiseen ja hallintaan. Se toteuttaa myös tavallisen ikkunakehyksen (DefWindowProc) ja useiden vakiokäyttöliittymäelementtien (painikkeet, valintaruudut, valintanapit, vierityspalkit, luettelot, yhdistelmäruudut ja valintaikkunat, joissa on lapsia) renderöinnin.

Ikkunaa luotaessa (kaksi vaihetta: RegisterClass+CreateWindow, kun käytetään tavallisia käyttöliittymäelementtejä, ensimmäistä vaihetta ei tarvita) määritetään seuraavat: koordinaatit, merkkijono (otsikko tai merkkijono painikkeen vieressä), tyyliliput ja ylätaso ikkuna. Kutsu RegisterClassiin määrittää myös "ikkunamenettelyn" (WNDPROC).

Jo luodun ikkunan kokoa ja Z-järjestystä ohjataan erikoiskutsuilla. Mitä tulee ikkunan tyypistä riippuvaan ohjaukseen (esimerkiksi valintaruudun virittäminen / nollaus tai rivien lisääminen luetteloon) - se suoritetaan kutsumalla SendMessage, jossa on 2 viestikoodia (esim. WM_COMMAND+LB_ADDSTRING ) ja parametri.

WNDPROC on sovellukseen toteutettu toiminto, jota KÄYTTÄJÄ kutsuu, kun ikkunan elinkaaren aikana tapahtuu erilaisia ​​tapahtumia (tavallisissa käyttöliittymäelementeissä toiminto toteutetaan itse KÄYTTÄJÄssä tai DLL:ssä, jossa objekti on toteutettu, kuten COMCTL32.DLL ). WNDPROC välitetään HWND, viestikoodi ( WM_xxx) ja 2 parametria.

WNDPROC-kehittäjän vastuulla on ohittaa kaikki hänelle tuntemattomat viestikoodit DefWindowProcissa.

Pääviestit:

Resurssit

KÄYTTÄJÄ käyttää aktiivisesti ns. resurssit ovat vain luku -tietoja, jotka on upotettu EXE/DLL-tiedostoon erityisellä tavalla rakennusvaiheessa.

Resurssit itsessään eivät ole osa KÄYTTÄJÄ, ja niitä voidaan käyttää ilman sitä (esim. merkkijonotaulukko - merkkijonotaulukot sovelluksen lokalisoimiseksi eri kielille), mutta tietyntyyppisiä resursseja KÄYTTÄJÄ käyttää automaattisesti (esim. valikoiden kuvaukset ja valintaikkunat, joissa luetellaan esimerkiksi kaikki tämän valintaikkunan sisäiset ohjaimet sekä niiden koordinaatit ja viivat).

Ohjelmaa kehitettäessä resurssit sijoitetaan jollain yksinkertaisella kielellä kirjoitettuun tekstitiedostoon, jossa on .rc-liite. Samaan aikaan oli kauan sitten työkaluja dialogien ja valikkojen kuvausten visuaaliseen muokkaamiseen.

Ohjelmaa rakentaessaan RC.EXE-kääntäjä kääntää .rc:n binäärimuotoiseksi .res-tiedostoksi, jonka LINK-ohjelma ompelee EXE/DLL-tiedostoksi.

Ikkunaa luotaessa voit määrittää resurssin kahvan, jossa ikkunan ylävalikon kuvaus sijaitsee - ja KÄYTTÄJÄ luo ja piirtää valikon automaattisesti ja lähettää ikkunaan WM_COMMAND valikkokohdan koodilla, kun kohde on valittu.

Wraps

Suosituin C++-kääre USER:n ympärillä on ollut MFC pitkään  ja se on käytössä edelleen. WTL - kääre on myös suosittu .

Korvaus

Koko noin 25 vuotta vanhaa USER-teknologiaa korvaa vähitellen Windows Presentation Foundation ( WPF ), jossa esimerkiksi resurssikieli on korvattu paljon rikkaammalla XAML :lla ja mikä tahansa vektorigrafiikkaelementti tai jopa ikkuna voi olla objekti, joka voi vastaanottaa tapahtumia DirectShown kautta näytettävän elokuvan kanssa .

Toteutus

win32k.sys (alemmat tasot, mukaan lukien luettelot ikkunoista ja niiden leikkausalueista) ja user32.dll (sovellusten käytettävissä olevat kutsut, DefWindowProc ja vakioelementit).

Kritiikki

Joidenkin väitteiden mukaan (niiltä, ​​jotka ovat nähneet laittoman lähdekoodin), KÄYTTÄJÄN lähdekoodi on kirjoitettu hirviömäiseen tyyliin ja sisältää pieniä muokkauksia tiettyjen sovellusten, kuten PowerPointin , tukemiseksi .

Samaan tapaan tätä koodia ei ole koskaan kirjoitettu uudelleen 25 vuoteen, ja tämä on ehkä epärealistinen tehtävä sovellusten yhteensopivuuden ylläpitämisen kannalta.

Lisäksi on näkökohtia, jotka eivät vaadi tietoja laittomasta koodista.

WNDPROC:n käyttäminen kytkinkäskyn kanssa kaikille viestikoodeille näyttää erittäin rumalta (tämä ongelma on ratkaistu kaikissa C++-kääreissä).

Ikkunassa on käsite asiakas- ja ei-asiakasalue - ikkunan sisäpuoli ja kehys (yleensä vakio). Tämä johtaa kahteen viestikoodisarjaan sisälle ja kehykselle - renderöinti, näppäimistö, hiiri jne. Lisäksi kehyksen ja sisäpuolen arkkitehtoninen erottelu vaikeutuu, mikä vaikeuttaa MVC :n arkkitehtonisten periaatteiden toteuttamista .

Ongelma on kuitenkin jo ratkaistu MFC:ssä: luodaan erillinen sisäikkuna, joka liikkuu automaattisesti kehystä liikutettaessa ja johon piirretään kaikki mitä sovellus haluaa piirtää. Ikkunaa kutsutaan näkymäksi, ja tässä arkkitehtuurissa MVC on jo helppo toteuttaa. Tällaista näkymää voidaan esimerkiksi käyttää uudelleen OLE-tekniikalla sisäkkäisessä asiakirjassa.

Mielenkiintoisia faktoja

Unkarilaista merkintää käytettiin ensimmäisen kerran USER -sovelluksessa - merkinnän keksijä Charles Simonyi oli tämän komponentin pääkehittäjä.

Likimääräiset analogit

X11 -tekniikan ylemmät tasot, joita käytetään UNIX-tyyppisissä käyttöjärjestelmissä, kuten Linux , sekä KDE- ja Gnome-tekniikoiden alemmat tasot (samoissa käyttöjärjestelmissä).

Katso myös

Muistiinpanot

Kirjallisuus

Linkit