Rex NemoMedlem sedan mars 200225 inlägg
Hej!
Nu är jag less på att göra tråkiga promptprogram och därför vill jag lära mig att skapa grafiska gränssnitt för windows i C++. Problemet är att jag inte har riktigt koll på vad det är man behöver, och vad man bör tänka på.
Finns det någon standard el de facto standard för programmering av grafiska gränssnitt?
Finns det några bra böcker som hanterar windowsprogrammering (gärna på svenska, ej krav)?
Finns det någon nedladdningsbar referens till C eller C++, liknande Javas dokumentation?
Jag har tillgång till Visual Studio, och undrar om det är bäst att använda MFC, eller om jag bör använda något annat?
Vad finns det för bra alternativ till MFC om jag skulle vilja använda mig av andra utvecklingsmiljöer till exempel DevC++?
MVH Rex
:)
BeatboxMedlem sedan okt. 20012 496 inlägg
Bäst är nog att använda MFC eller nått annat klassbibliotek.
Marcus EMedlem sedan maj 20021 294 inlägg
Det finns tyvärr ingen standard för GUI. Den främsta anledningen är att det skiljer så mycket mellan olika OS. Det finns däremot klassbibliotek för att kunna skapa gränssnitt för flera OS. Detta är dock inte intressant om du bara ska skapa för Windows.
Alternativet till MFC heter Win32 API. Det består av tusentals funktioner för att styra operativsystemet och skapa grafiska gränssnitt. Oavsett vilken miljö du använder måste du kunna Win32 API för att kunna göra utökningar.
Det kan vara knepigt att använda, men all nödvändig information hittar du i dokumentationen. Fria guider finns det gott om på Internet. Sök t.ex. på win32 api tutorial med Google. Jag har aldrig behövt någon bok.
SDK (dokumentation och header-filer) hittar du på http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
BeatboxMedlem sedan okt. 20012 496 inlägg
Win32 rekommenderar Microsoft själva att man inte programmerar direkt mot. Dom slutar stödja det då dom portat allt till .NET. Hur länge det är tills dess vet ingen. MS rekommenderar att man använder nått av klassbiblioteken som finns. Då garanterar dom att det kommer att fungera även i framtiden.
Marcus EMedlem sedan maj 20021 294 inlägg
Var står den rekommendationen?
Win32 API kommer aldrig att sluta stödjas. Alla Windowsprogram och klassbibliotek är baserade på det. Om Microsoft skulle sluta stödja det skulle inget program fungera, inte ens .NET-program. Jag tror knappast det händer.
Det kommer ta mycket lång tid innan de har implementerat allt i .NET. De har inte ens implementerat de allra simplaste funktionerna Beep, PlaySound och ShowWindow (funktioner som jag var tvungen att importera när jag testade .NET sist).
Microsoft portar inte Win32 API till .NET. Microsoft bygger .NET på Win32 API. Skulle .NET inte bygga på Win32 API skulle det krävas ett nytt OS.
Givetvis är .NET mycket lättare och bättre att använda, men det går inte att använda utan Win32 API om man vill ha tillgång till allt. Dessutom, vem vill ladda ned en 20 MB stor fil (.NET runtime) för att köra ett litet program som man har gjort?
developerMedlem sedan aug. 2001453 inlägg
Marcus, jag håller i princip med dig - Win32 används av allt och alla och det kommer finnas kvar mycket länge. Men om man ska fundera lite på vad som skulle kunna hända...
Idag bygger Win32 API:erna på .Net, men det finns ju inget som säger att det kommer vara så i all framtid.
Att ladda ned runtimen är ett övergående problem. Windows XP SP1 kommer inkludera .Net Framework:et och det kommer även ingå i Windows .Net Server. Microsoft har helt klart intentionen att all kod ska köras managed.
Jag tror inte att hela win32 api:t kommer försvinna inom en överskådlig framtid. Men gradvis tror jag det händer. MFC kommer säkerligen portas till ett bibilotek ovanpå .Net Frameworkets klassbibiliotek förr eller senare. Nästa version av DirectX kommer finnas som ett managed interface.
ShowWindow finns inte, men i Windows Forms kan du använda Visible, WindowState och Activate() för att åstadkomma samma sak. Varken Beep eller PlaySound finns mig veterligt, men jag tror inte heller det är avgörande anledningar till att Win32:apit kommer finnas kvar. :)
PeWMedlem sedan juni 20006 839 inlägg
Håller med ovan inläggen... ;)
Rex Nemo ->
På http://www.bloodshed.net/ finns det länkar och mer info om win32 programmering med Dev-C++
Vidare så kan du ju kolla t.ex -> https://www.relisoft.com/win32
Men det finns hur mycket som helst att hitta på nätet. På t.ex gamedev.net ligger det en del tutors som är sevärda ;)
Marcus EMedlem sedan maj 20021 294 inlägg
Developer:
Ingen av de egenskaperna du nämner fungerar som ShowWindow. Med ShowWindow kan du t.ex. visa ett fönster utan att aktivera det. Det gick inte när jag testade sist. Ett löjligt litet problem som kan vara väldigt irriterande.
Jag tror mycket starkt på .NET, men jag tror inte på det nu och jag rekommenderar ingen att använda det nu. Vänta 2-5 år tills det mognat.
Rex NemoMedlem sedan mars 200225 inlägg
Tack!
Tack ska ni ha för svaren, ska ta och titta på länkarna som ni har bifogat. :) Finns det inga andra alternativ än Win32 Api och MFC, som gäller? Vilka böcker rekommenderar ni för windowsprogrammering?
MVH Rex
Marcus EMedlem sedan maj 20021 294 inlägg
Den enda bok jag läst är Lär dig Visual Studio på 3 veckor och den rekommenderar jag ej. Det var den tråkigaste bok jag någonsin läst.
Ett annat alternativ till MFC/Win32 API är C++ Builder, men det rekommenderar jag inte heller. Kortfattat är det en väldigt enkel att använda och bra objektorienterad RAD-miljö, men fruktansvärt instabil. Om det bara blev stabilt skulle det vara perfekt, men det har varit lika instabilt sen första versionen och det är knappast troligt att Borland lyckas lösa problemen.
Egentligen finns det inget bra alternativ för C++-programmerare. Det är bara att hålla sig till Win32 API.
BeatboxMedlem sedan okt. 20012 496 inlägg
Developer :
Marcus, jag håller i princip med dig - Win32 används av allt och alla och det kommer finnas kvar mycket länge. Men om man ska fundera lite på vad som skulle kunna hända...
Det är därför MS ger indikationer redan nu om att man ska t ex hålla på med UI så garanterar dom att det funkar även i framtiden om man använder ett klassbibliotek istället för rena API metoder. Men faktum är att MS kommer att sluta supporta Win32 framöver även om det finns kvar. T ex så kanske det på sikt slutar finnas med i MSDN. Det MS gett indikationer om är att dom ska börja med UI-delarna. Det är dom som kommer att sluta supportas först.
Angående att ladda in 20 MB.... det behövs göras för t ex varje spel som säljs idag och marknaden verkar inte uppleva detta som nått stort problem. Om det vore på det sättet skulle spelmarknaden inte exploderat.
developerMedlem sedan aug. 2001453 inlägg
Ett alternativ är väl ATL Window Classes. Jag tycker personligen att det är väldigt användbart, man har ett hyfsat ramverk samtidigt som man kan använda hela Win32. Tröskeln är tyvärr mycket högre än för MFC. Det krävs nog att man har åtminstone hyfsad kunskap om både ATL och fönsterhantering Win32. Jag vet inget om framtida support av detta. Titta på:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvc60/html/atlwindow.asp
samt
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_atl_ATL_Window_Classes.asp?frame=true
Rex NemoMedlem sedan mars 200225 inlägg
Tack ska ni ha för hjälpen allihopa, nu har jag fått något att fundera på.
MVH Rex
:)
Marcus EMedlem sedan maj 20021 294 inlägg
ATL innehåller inte mycket stöd för grafiska gränssnitt. Windows Template Library (WTL) är en utökning av ATL och har massor av klasser för grafiska gränssnitt.
Det är odokumenterat och stöds ej av Microsoft, men många tycker det är bättre än MFC. Version 7 (tredje versionen) släpptes nyligen och har full integration med VS .NET.
http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/586/msdncompositedoc.xml
http://www.codeproject.com/wtl/
http://www.codeproject.com/wtl/wtldocs2.asp
jtMedlem sedan juni 2000326 inlägg
Någon som kan hänvisa till mer info om "Win32 rekommenderar Microsoft själva att man inte programmerar direkt mot."
BeatboxMedlem sedan okt. 20012 496 inlägg
Jag läste det i ett nummer av Microsoft Journal. Kom inte ihåg vilket nummer det var.
jtMedlem sedan juni 2000326 inlägg
Att inte programmera direkt mot win32 API har alltid varit bra med tanke på att det ska fungera i framtiden, det skiljer t.e.x mellan de olika windows versionerna och vissa funktioner tas bort i nya versioner. Problemet är altså inte direkt någon nyhet. Att möjligeten att använda win32 skulle försvinna inom de närmasta tiden verkar tveksamt. Det borde i sådana fall stå men stora bokstäver i all MS dokumentation.
Marcus EMedlem sedan maj 20021 294 inlägg
jt skrev:
Att inte programmera direkt mot win32 API har alltid varit bra med tanke på att det ska fungera i framtiden
Snarare det motsatta. Programmerar man direkt mot Win32 kan man vara säker på att det fungerar. Om en funktion mot förmodan skulle försvinna är det bara att ersätta den. Det är inte lika lätt att byta ut funktionen i ett bibliotek som man kanske inte ens har källkoden till.
jt skrev:
det skiljer t.e.x mellan de olika windows versionerna
Inte så värst mycket. Jag har gått igenom de flesta API-funktionerna och det främsta som skiljer är vissa parametrar som endast fungerar under NT. Anger man NULL så fungerar det både i NT och 95.
jt skrev:
och vissa funktioner tas bort i nya versioner
Absolut inte. Har man gjort ett program för Windows så fungerar det för all framtid (eller väldigt lång tid). Gamla Windows 3.1-program fungerar fortfarande utmärkt. Det kallas bakåtkompatibiltet. Microsoft tar bort dokumentationen för funktionerna och hänvisar till nya, men koden finns fortfarande kvar.
jt skrev:
Att möjligeten att använda win32 skulle försvinna inom de närmasta tiden verkar tveksamt.
Det är otänkbart att Win32 skulle försvinna.
Marcus skrev:
Win32 API kommer aldrig att sluta stödjas. Alla Windowsprogram och klassbibliotek är baserade på det. Om Microsoft skulle sluta stödja det skulle inget program fungera, inte ens .NET-program. Jag tror knappast det händer.
Win32 API kan vara komplicerat att använda, men påstå inte att det är dåligt eller att det kommer försvinna. Det är trots allt grunden i systemet som alla program är baserade på.
jtMedlem sedan juni 2000326 inlägg
Du har nog rätt i att det inte försvinner några API och att de flesta skillnaderna ligger mellan win9x och NT.
>Det är otänkbart att Win32 skulle försvinna.
Det tror jag ochså. Det var därför jag ville ha en hänvisning till en MS källa där det förklaras varför MS inte rekomenderar att man använder win32 API.
>Win32 API kan vara komplicerat att använda, men påstå inte att det är dåligt eller att det kommer försvinna
Om det är komplicerat att använda så skulle man väl ocshå kunna säga att det är dåligt nu finns det säkert flera skäl till att det ser ut som det gör. Vore ju inte så rolgt om MS ändrade API var tredje år p.g.a att dom kommer på att det går att förbättra saker.Med detta menar jag inte att det skulle vara dåligt att använda win32 API när man programmerar. Det jag mest tänkte på var att fördelarna(/nackdelarna ;-) av att använda klassbibliotek inte direkt har förändrats pga att MS har släppt dotNet. Att MS vill att alla ska använda dotNet är ju en annan sak.
BeatboxMedlem sedan okt. 20012 496 inlägg
Jag kan maila jobbets kontakt som vi har på Microsoft i Redmond och fråga. Jag kan visa svaret här sedan. För den delen så pratade jag inte om att HELA APIT:t skulle sluta stödjas utan pratade om UI bitarna som denna tråd handlar om också.