Jak działają biblioteki

0

Witam,
od jakiegoś czasu interesuję się programowaniem. Ostatnio zacząłem uczyć się biblioteki WinApi by móc tworzyć aplikację okienkowe, i zaciekawiła mnie jedna rzecz.
Jak to się dzieje, że funkcja WinApi tworzy okno na ekranie?
W jakim języku ta funkcja jest napisana?
Przy tworzeniu okienek my te funkcję wywołujemy, ale ciekawi mnie fakt jak wygląda kod tej funkcji ?

1

Jak to się dzieje, że funkcja WinApi tworzy okno na ekranie?
Odwołuje się do sterownika karty graficznej i zapisuje dane (obraz) do bufora ekranu.

W jakim języku ta funkcja jest napisana?
Większość Windowsa napisana jest w C++.

Przy tworzeniu okienek my te funkcję wywołujemy, ale ciekawi mnie fakt jak wygląda kod tej funkcji
Kod źródłowy Windowsa nie jest powszechnie dostępny.

Jakbyś napisał jaka funkcja cię konkretnie interesuje, to może dałoby się coś więcej opowiedzieć.

0

Nie interesuje mnie żadna konkretna funkcja, po prostu parę dni temu wyświetliłem swoje pierwsze okienko i zainteresowało mnie jak to działa.

Ogólnie mam rozumieć, że karta graficzna ma swoje jakieś funkcję, i w WinApi one są wywoływane przez jakieś funkcję C++?

Czy można samodzielnie w C++ napisać kod który wywoła jakieś okienko na ekranie? Czy konieczne jest używanie dostępnych bibliotek?

0

Nie. Karta graficzna ma bufor pamięci który jest wyświetlany na ekranie. W bardzo starych dosowych trybach graficznych miałeś np. tryb 320x200 pikseli i wiadomo było gdzie zaczyna sie pamieć karty graficznej. Każdy bajt określał kolor jednego piksela. Jeśli ten bazowy adres to było 0x1234 to to wpisując wartość pod komórkę pamięci x1234+10 zapalałeś 10 piksel w pierwszym rzędzie na ekranie na jakis kolor. Np. wisałeś 10 i to był kolor różowy.
Teraz jest to trochę bardziej skomplikowane ale idea jest nadal taka sama. To są niskopoziomowe operacje.

0

Teraz jest to trochę bardziej skomplikowane ale idea jest nadal taka sama.

O ile w Windows XP, a także Viście i 7 przy wyłączonym Aero jeszcze można było otrzymać wskaźnik na pamięć ekranu i po nim mazać, to przy włączonym Aero (a w 8 i nowszych na stałe) między programem a kartą graficzną jest DWM (Desktop Window Manager), który nie ma jednego bufora ekranu, tylko renderuje każde okno jako osobną teksturę, a złożeniem ich w jeden obraz zajmuje się sprzętowo karta graficzna.

0

No mniej więcej rozumiem ;d ale czy można z poziomu języka C++ wywołać jakoś obraz ?

0

Ale w takim dosowym środowisku? Można, tak samo jak z poziomu assemblera. Ale jak chcesz to zrobić w jakimś Win10 to musisz korzystać z drivera karty graficznej albo napisać własny.

0

Załóżmy, że chciałbym stworzyć program, który pokaże okienko z napisem Hello World. Mogę coś takiego napisać w Code Blocku za pomocą C++ nie korzystając z Bibliotek?

0

Technicznie niby "tak", nie wykorzystując ich w każdym razie jawnie (@msm, @Gynvael Coldwind ktoś coś?), lecz praktycznie nie masz co się w takie coś bawić.
Wydaje mi się, że po prostu nie rozumiesz tak naprawdę po co są biblioteki :P

0

Teoretycznie? Tak. Praktycznie? Nie.
Musiałbyś napisać własny sterownik dla karty graficznej ;] No chyba że interesuje cię też rozwiazanie pod jakiegoś dosboxa, wtedy to się da zrobić z wykorzystaniem asemblera i 13h.

0

Ja to wiem, że się do napisania czegoś takiego nie nadam, tak po prostu byłem ciekaw jak to mniej więcej działa ;) W takim razie dziękuję za odpowiedzi na moje pytania.:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1