2025-06-05, 19:53
  #1
Avslutad
Jag har precis börjat läsa Petzolds kända bok Programming Windows 5th Edition då jag blivit intresserad av att skapa GUI-applikationer med C/C++. Det är kul att koda på en lägre nivå och ha mer kontroll. Om man använder t.ex. GDI/GDI+/Direct2D m.m. så kan man ju i teorin skapa vilka GUIn man vill. Man kan få till saker som inte är möjligt i t.ex. .NET då man inte är låst på samma sätt.

Man inser samtidigt hur bortskämd man är när man kodat i ett högnivåspråk som C#. I C# behöver man t.ex. inte bry sig det minsta om att en scrollbar funkar som den ska. Den bara funkar. Men ska man få en scrollbar funka med Win32 får man se till att koda logiken för det.

Tycker än så länge det är riktigt kul. Samtidigt vet jag att det är många som säger att det inte är värt lära sig Win32 då det är legacy och det finns så många GUI-librarys som t.ex. QT, WxWidgets m.fl. Men jag tycker det är intressant att ha total kontroll över det man gör och lära sig lite hur saker fungerar under huven.

Någon här som kodar Win32?

En sida jag hittat som har några Win32 api tutorials är https://winprog.org/tutorial/

Om någon känner till fler bra sidor så får ni gärna posta i tråden.
Citera
2025-06-05, 20:04
  #2
Medlem
PetterHanssons avatar
c# knappast högnivåspråk
ok de har printf som kommando som relativt enkelt men nä...inget högnivåspråk.
Citera
2025-06-05, 20:38
  #3
Medlem
ZadMan32s avatar
Citat:
Ursprungligen postat av PetterHansson
c# knappast högnivåspråk
ok de har printf som kommando som relativt enkelt men nä...inget högnivåspråk.

C# är ett tolkat JIT kompilerat språk med en garbage collector och enormt mycket abstraktioner.
Råder inga tvivel om att C# är ett högnivåspråk
Citera
2025-06-05, 20:40
  #4
Medlem
Citat:
Ursprungligen postat av PetterHansson
c# knappast högnivåspråk
ok de har printf som kommando som relativt enkelt men nä...inget högnivåspråk.
Beror lite på vem du frågar och i vilket sammanhang det är. Förr menade man med högnivåspråk "inte assembler". Och C# är definitivt mer av ett högnivåspråk än C.
Citera
2025-06-06, 09:06
  #5
Avslutad
Petzolds bok finns att ladda hem här:
https://www.cl72.org/100winProg.html
Citera
2025-06-06, 10:14
  #6
Medlem
datalogs avatar
Citat:
Ursprungligen postat av A-Good-Man
Någon här som kodar Win32?
Nej, Win32 är ju svingammalt och dåligt. Finns många bättre ramverk för att bygga grafiska applikationer som dessutom fungerar på fler plattformar än Windows.

Jag kör React Native, Electron och Flutter för det mesta. Ska jag utveckla för webben blir det oftast Angular.
Citera
2025-06-06, 12:30
  #7
Medlem
ZadMan32s avatar
Citat:
Ursprungligen postat av datalog
Nej, Win32 är ju svingammalt och dåligt. Finns många bättre ramverk för att bygga grafiska applikationer som dessutom fungerar på fler plattformar än Windows.

Jag kör React Native, Electron och Flutter för det mesta. Ska jag utveckla för webben blir det oftast Angular.

Min personliga åsikt är att moderna GUI ramverk möjliggör utvecklandet av all bloatware som förpestar våra digitala värld.
Startmenyn i Windows 11 har en del som är byggd i react native vilket lett till massa minnesproblem för användare, det är bara ett exempel men det är sånt som får folk att hoppa till linux istället.

Utvecklar du ett GUI i Win32 så har du ju som TS säger full kontroll vilket innebär att du kan optimera det.
Med det sagt så tar det betydligt längre tid att skriva bra, optimerad mjukvara än att skriva snabb, minnesläckande bloatware
Citera
2025-06-06, 13:09
  #8
Avslutad
Citat:
Ursprungligen postat av datalog
Nej, Win32 är ju svingammalt och dåligt. Finns många bättre ramverk för att bygga grafiska applikationer som dessutom fungerar på fler plattformar än Windows.

Jag kör React Native, Electron och Flutter för det mesta. Ska jag utveckla för webben blir det oftast Angular.
På tal om ramverk/toolkits kan jag nämna https://www.tecgraf.puc-rio.br/iup/ som inte verkar nämnas så ofta.
Det är en wrapper för (bland annat) Win32. Lite mer abstraktion än ren Win32 men fortfarande väldigt lightweight så vill man skriva en GUI-applikation som ser ut som en typisk win32-app men lite mer utvecklingsvänligt så kan det vara ett alternativ. Tycker det var väldigt enkelt toolkit lära sig när jag satt och testade en kväll.
Citera
2025-06-28, 01:06
  #9
Medlem
Citat:
Ursprungligen postat av A-Good-Man
Jag har precis börjat läsa Petzolds kända bok Programming Windows 5th Edition då jag blivit intresserad av att skapa GUI-applikationer med C/C++. Det är kul att koda på en lägre nivå och ha mer kontroll. Om man använder t.ex. GDI/GDI+/Direct2D m.m. så kan man ju i teorin skapa vilka GUIn man vill. Man kan få till saker som inte är möjligt i t.ex. .NET då man inte är låst på samma sätt.

Den boken är fantastiskt bra på det viset att man lär sig förstå hur GUI fungerar, och den åldras inte. Windows GUI fungerar på precis samma sätt idag som då. Också bra att den framförallt är skriven i språket C för då får man lära sig hur det faktiskt fungerar.

Med det sagt så bör man inte underskatta vilket jobb det är att implementera ett ramverk för ett GUI och hur svårt det är att göra det flexibelt så det går att anpassa för andra GUI.

Det "bästa" ramverket jag använt för win32 är troligen Windows Template Library. Inget som underhålls eller utvecklas men fungerar fortfarande trots att det nu är över 20 år gammalt. Microsoft skapade först MFC som skal för windowsapplikationer, MFC är inte dåligt men kunde ha gjorts bättre. WTL klarar samma saker, är mindre kod och snabbare. Smartare byggt.

Även om det är få ändringar i Win32 har C++ gått framåt mycket och därför går ramverken förbättra.

Svåraste med GUI är att de är så plattformsspecifika.
Många väljer Dear ImGui eftersom det inte är plattformsspecifikt utan anpassat efter att rita ut grafiken själv men det gör att applikationer skrivna på Dear ImGui är svåra och porta till ramverk som är event anpassade som flera av de andra är eftersom det är så inbyggd grafiskt gränssnitt fungerar.
Citera
2025-06-28, 14:42
  #10
Avslutad
Citat:
Ursprungligen postat av -dev
Den boken är fantastiskt bra på det viset att man lär sig förstå hur GUI fungerar, och den åldras inte. Windows GUI fungerar på precis samma sätt idag som då. Också bra att den framförallt är skriven i språket C för då får man lära sig hur det faktiskt fungerar.

Med det sagt så bör man inte underskatta vilket jobb det är att implementera ett ramverk för ett GUI och hur svårt det är att göra det flexibelt så det går att anpassa för andra GUI.

Det "bästa" ramverket jag använt för win32 är troligen Windows Template Library. Inget som underhålls eller utvecklas men fungerar fortfarande trots att det nu är över 20 år gammalt. Microsoft skapade först MFC som skal för windowsapplikationer, MFC är inte dåligt men kunde ha gjorts bättre. WTL klarar samma saker, är mindre kod och snabbare. Smartare byggt.

Även om det är få ändringar i Win32 har C++ gått framåt mycket och därför går ramverken förbättra.

Svåraste med GUI är att de är så plattformsspecifika.
Många väljer Dear ImGui eftersom det inte är plattformsspecifikt utan anpassat efter att rita ut grafiken själv men det gör att applikationer skrivna på Dear ImGui är svåra och porta till ramverk som är event anpassade som flera av de andra är eftersom det är så inbyggd grafiskt gränssnitt fungerar.
Nåt som hade varit roligt hade varit att utveckla ett eget plattformsoberoende GUI library, men jag känner att detta ligger över min kunskapsnivå. Känns som man behöver ha kunskap inom en massa olika områden och förstå hur OS:et fungerar internt. Svårt att hitta bra källor eller tutorials för detta också.
Citera
2025-06-28, 20:28
  #11
Avslutad
Tycker man har tappat intresset för win32 lite nu senaste tiden. Det är så "verbose". Alla dessa typedef's också, mkt gammal skit som verkar hänga kvar sen långt tillbaka. Lutar åt att jag satsar på att lära mig Rust istället och något existerande GUI ramverk som t.ex. Tauri eller liknande.
Citera
2025-06-28, 20:40
  #12
Medlem
Citat:
Ursprungligen postat av A-Good-Man
Tycker än så länge det är riktigt kul. Samtidigt vet jag att det är många som säger att det inte är värt lära sig Win32 då det är legacy och det finns så många GUI-librarys som t.ex. QT, WxWidgets m.fl. Men jag tycker det är intressant att ha total kontroll över det man gör och lära sig lite hur saker fungerar under huven.

Både QT och WxWidgets är väl öppen källkod så det är inget som stoppar dig från att lära dig hur de fungerar under huven, och kanske även hjälpa till att lösa buggar eller implementera nya funktionen.

Byter du från Windows till Linux så kan du även lära dig hur systemet fungerar på ännu lägre nivå genom läsa källkoden till kärnan, och ändra den om du har lust.
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in