/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Windowsprogrammering
Fra : Jacob Jensen


Dato : 21-01-05 15:16

Jeg har sat followup-to: dk.edb.programmering.c

Hej gruppe

Jeg kunne virkeligt godt tænke mig at vide lidt mere om
windowsprogrammering. Jeg har en bog "Beginning visual C++ 6" hvori der er
nogle kapitler om dette. I kapitel 7 (A taste of old-fashoned windows) gives
der en introduktion til windowsbeskeder og mekanismen bag det. Herefter
laver man et lille bitte windows program fra bunden som viser et vindue og
skriver noget tekst i midten af det.

Det næste der sker er så i kapitel og frem hvor man bruger MFC (microsoft
foundation classes) en hel del. Man laver et lille tegneprogram og det er
alt sammen meget interessant, men jeg savner nu en dybere forsåelse af
hvordan det hele fungerer.

Er det helt normalt at man bruger sådan en
"giv-mig-en-skal-til-et-windows-program"-samlepakke og så bare fylder
funktionaliteten ud? For en begynder på området som gerne vil lære hvordan
det fungerer, finder jeg det mere interessant at lave det fra bunden. Jeg
kan godt se det bliver omfattende, men lige nu er jeg lidt frustreret over
slet ikke at vide hvordan man skulle gøre. I tegneprogram-eksemplet i bogen
bruger de en masse klasser som definerer nogle device contexts og nogle
views og sådan noget og tegner så gennem dem. Hvordan ville dette fungere
uden MFC?

Jeg tænker lidt på om det ville være så meget ekstremt mere kompliceret at
lave et lille windows program ala det i kapitel 7 som f.eks. tegnede en
streg i vinduet og fik den til at bevæge sig frem og tilbage. Hvor
kompliceret er noget så simpelt? :) Hvordan gør man?

Måske er det rart for jer at vide lidt om mig. Jeg er Datalogistuderende og
er lidt over halvvejs i uddannelsen. Jeg er inde i de basale C++ mekanismer.

Jacob



 
 
Mogens Hansen (21-01-2005)
Kommentar
Fra : Mogens Hansen


Dato : 21-01-05 15:31


"Jacob Jensen" <omo@adslhome.dk> wrote in message
news:41f10e9f$0$163$edfadb0f@dtext02.news.tele.dk...

[8<8<8<]
> Jeg tænker lidt på om det ville være så meget ekstremt mere kompliceret at
> lave et lille windows program ala det i kapitel 7 som f.eks. tegnede en
> streg i vinduet og fik den til at bevæge sig frem og tilbage. Hvor
> kompliceret er noget så simpelt? :) Hvordan gør man?

Det er ikke specielt kompliceret - dog skal man huske på at Win32 API ofte
ikke er særligt typesikkert.
Omvendt er det ikke nogen æstetisk nydelse.
Spørgsmålet er hvorfor du ønsker at lære det når Microsoft med hastige
skridt bevæger sig i retning af .NET som foretrukne API til applikationer
(det må du naturligvis om).

En rigtig god introduktion til Win32 API er bogen
Programming Windows, Fifth Edition
Charles Petzold
ISBN 1-57231-995-X
Der vil du formodentlig kunne finde svarene på alt hvad du spørger om

Det er nemt at lave nogle små C++ klasser, der benytter RAII til gøre
programmering lidt simplere (Så man f.eks. husker at pare "BeginPaint" med
"EndPointer" , "GetDC" med "ReleaseDC" osv.).
Man får også hurtigt lyst til at benytte nogle klasser, så man undgår
globale variable med tilhørende skaleringsproblemer.

Venlig hilsen

Mogens Hansen



Jacob Jensen (21-01-2005)
Kommentar
Fra : Jacob Jensen


Dato : 21-01-05 18:51

> En rigtig god introduktion til Win32 API er bogen
> Programming Windows, Fifth Edition
> Charles Petzold
> ISBN 1-57231-995-X
> Der vil du formodentlig kunne finde svarene på alt hvad du spørger om

Tak. Den må jeg prøve at finde.

> Det er nemt at lave nogle små C++ klasser, der benytter RAII til gøre
> programmering lidt simplere (Så man f.eks. husker at pare "BeginPaint" med
> "EndPointer" , "GetDC" med "ReleaseDC" osv.).

BeginPaint, EndPointer...? Det er nok noget jeg ikke kender til pga. MFC :)
Der kan man bare se.

Jacob



Jacob Jensen (21-01-2005)
Kommentar
Fra : Jacob Jensen


Dato : 21-01-05 18:53

> BeginPaint, EndPointer...? Det er nok noget jeg ikke kender til pga. MFC
> :) Der kan man bare se.

...og ligeledes med RAII

Jacob



Mogens Hansen (21-01-2005)
Kommentar
Fra : Mogens Hansen


Dato : 21-01-05 19:21


"Jacob Jensen" <omo@adslhome.dk> wrote in message
news:41f1416b$0$183$edfadb0f@dtext02.news.tele.dk...

[8<8<8<]
> ..og ligeledes med RAII

RAII: Resource Acquisition Is Initialization
Det er ikke MS-Windows specifikt, men en af de mest nyttige ting i C++.
Der baserer sig på deterministiske destructorer i C++.

RAII sikrer at man får frigivet resourcer (generelt - ikke bare hukommelse)
automatisk når man har fået den.
Resourcen hentes i et objekts constructor og frigives i destructoren.

F.eks. har man ansvaret for at frigive en Device Context når man har fået
den.
Man kan f.eks. få den med "GetDC" og frigive den med "ReleaseDC".

C++ kode (Ikke compileret):
class DeviceContext
{
public:
DeviceContext(HWND hWnd) :
hdc(::GetDC(hWnd)) // aquire resource
{
if(!hdc)
throw runtime_error("Unable to aquire handle to device context");
}

~DeviceContext()
{
::Release(hdc); // release resource
}

operator HDC ();
{ return hdc; }

private:
HDC hdc;
};

Den kan så bruges i en funktion:

void bar(HWND hWnd)
{
DeviceContext dc(hWnd);

//....
if(SomeCondition())
return;

// ...
MightThrow();
}

Bemærk at hvis det ikke er muligt at få en DC vil DeviceContext
constructoren smide en exception.
Dermed etablerer den en invarians i funktion: der findes en lovlig DC -
ingen grund til at komplicere funktionen med yderligere logik.

Når først den invarians er etableret garanterer sproget samtidig at
resourcen DC bliver frigivet inden funktionen forlades.
Det er uanset om det er fordi man returnerer midt i funktionen, om man
kalder en funktioner der måske smider en exception der ryger ud af
funktionen eller om funktionen simpelthen kører til enden.

Faktisk bliver exception håndtering enorm simpel: der er slet ingen
try/catch.
For yderligere information om fejlhåndtering og exceptions se
The C++ Programming Language, Special Edition
Bjarne Stroustrup
ISBN 0-201-70073-5
Appendix E
(Det kan downloades fra Bjarnes Stroustrup's hjemmeside:
http://www.research.att.com/~bs/
http://www.research.att.com/~bs/3rd_safe0.html)

For yderligere beskrivelse af RAII se
The C++ Programming Language, Special Edition
Bjarne Stroustrup
ISBN 0-201-70073-5
side 366 for yderligere information

Venlig hilsen

Mogens Hansen



Mogens Hansen (21-01-2005)
Kommentar
Fra : Mogens Hansen


Dato : 21-01-05 19:04


"Jacob Jensen" <omo@adslhome.dk> wrote in message
news:41f14109$0$157$edfadb0f@dtext02.news.tele.dk...

[8<8<8<]
> BeginPaint, EndPointer...? Det er nok noget jeg ikke kender til pga. MFC
> :) Der kan man bare se.

Ups ...
Det skulle have været "EndPaint".

Man indleder tegning med at kalde "BeginPaint" og afslutter med "EndPaint".
Ind imellem tegner man hvad man har brug for: linier, tekst etc.

Venlig hilsen

Mogens Hansen



Bertel Brander (21-01-2005)
Kommentar
Fra : Bertel Brander


Dato : 21-01-05 20:11

Jacob Jensen wrote:
> Jeg har sat followup-to: dk.edb.programmering.c
>
> Hej gruppe
>
> Jeg kunne virkeligt godt tænke mig at vide lidt mere om
> windowsprogrammering. Jeg har en bog "Beginning visual C++ 6" hvori der er
> nogle kapitler om dette. I kapitel 7 (A taste of old-fashoned windows) gives
> der en introduktion til windowsbeskeder og mekanismen bag det. Herefter
> laver man et lille bitte windows program fra bunden som viser et vindue og
> skriver noget tekst i midten af det.
>
> Det næste der sker er så i kapitel og frem hvor man bruger MFC (microsoft
> foundation classes) en hel del. Man laver et lille tegneprogram og det er
> alt sammen meget interessant, men jeg savner nu en dybere forsåelse af
> hvordan det hele fungerer.
>
> Er det helt normalt at man bruger sådan en
> "giv-mig-en-skal-til-et-windows-program"-samlepakke og så bare fylder
> funktionaliteten ud? For en begynder på området som gerne vil lære hvordan
> det fungerer, finder jeg det mere interessant at lave det fra bunden. Jeg
> kan godt se det bliver omfattende, men lige nu er jeg lidt frustreret over
> slet ikke at vide hvordan man skulle gøre. I tegneprogram-eksemplet i bogen
> bruger de en masse klasser som definerer nogle device contexts og nogle
> views og sådan noget og tegner så gennem dem. Hvordan ville dette fungere
> uden MFC?
>
> Jeg tænker lidt på om det ville være så meget ekstremt mere kompliceret at
> lave et lille windows program ala det i kapitel 7 som f.eks. tegnede en
> streg i vinduet og fik den til at bevæge sig frem og tilbage. Hvor
> kompliceret er noget så simpelt? :) Hvordan gør man?
>
> Måske er det rart for jer at vide lidt om mig. Jeg er Datalogistuderende og
> er lidt over halvvejs i uddannelsen. Jeg er inde i de basale C++ mekanismer.
>

Hvis du gerne vil et skridt længere ned for at forstå hvad der
sker synes jeg at du skal kaste dig over Win32Api'et. Det er
ikke svært, omend man kommer til at lave en stor mængde kode.

Emnet har (naturligvis) været diskuteret før, og konklutionen var
(som jeg udlægger den) at der ikke findes noget kønt C++ bibliotek
til Windows.
Jeg synes ikke du skal bruge .net eller MFC eller Borland Builder
eller Delphi eller C#.

Et par links til GUI biblioteker, jeg foretrækker det første (når
jeg ikke bruger Win32Api'et):

http://www.wxwidgets.org/
http://smartwin.sourceforge.net/
http://www.trolltech.com/
http://www.fltk.org/

Og en tutorial:
http://www.winprog.org/tutorial/index.html

Et Win32Api program med en ting der bevæger sig:
http://home20.inet.tele.dk/midgaard/snip/winbeetle.html

--
"We learned more from a three minute record, baby
than we ever learned in school"
- Bruce Springsteen

Michael Rasmussen (21-01-2005)
Kommentar
Fra : Michael Rasmussen


Dato : 21-01-05 20:43

On Fri, 21 Jan 2005 20:10:58 +0100, Bertel Brander wrote:

>
> Et par links til GUI biblioteker, jeg foretrækker det første (når jeg
> ikke bruger Win32Api'et):
>
Du glemte lige:
http://www.gtk.org/
For windows: http://www.gimp.org/~tml/gimp/win32/

Jeg ved ikke, om det lever op til dine skønhedsidialer Det har dog den
fordel, at hvis man senere vil skifte til .NET, findes GTK også til det,
da det er GTK, der bliver anvendt i MONO:
Den nemme: http://forge.novell.com/modules/xfmod/project/?gtks-inst4win
Den lidt sværere:
http://dotnetjunkies.com/WebLog/kaushik/archive/2004/02/29/8124.aspx

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


Bertel Brander (21-01-2005)
Kommentar
Fra : Bertel Brander


Dato : 21-01-05 21:03

Michael Rasmussen wrote:
> On Fri, 21 Jan 2005 20:10:58 +0100, Bertel Brander wrote:
>
>
>>Et par links til GUI biblioteker, jeg foretrækker det første (når jeg
>>ikke bruger Win32Api'et):
>>
>
> Du glemte lige:
> http://www.gtk.org/
> For windows: http://www.gimp.org/~tml/gimp/win32/
>
> Jeg ved ikke, om det lever op til dine skønhedsidialer

Jeg har ikke brugt gtk, og ved derfor ikke om det lever op til
min (og andres) "skønhedsidialer", hvad angår kode og udseende
af det færdige apps.

En af fordelene ved wxWidgets er at den bruger windows funktioner
når det er muligt, så programmerne får samme udeseende som
andre Windows apps, og har de samme features.
Det er vist ikke tilfældet med gtk ?

--
"We learned more from a three minute record, baby
than we ever learned in school"
- Bruce Springsteen

Michael Rasmussen (21-01-2005)
Kommentar
Fra : Michael Rasmussen


Dato : 21-01-05 21:14

On Fri, 21 Jan 2005 21:03:16 +0100, Bertel Brander wrote:

>
> Jeg har ikke brugt gtk, og ved derfor ikke om det lever op til min (og
> andres) "skønhedsidialer", hvad angår kode og udseende af det færdige
> apps.
>
Andre mener, at GTK er dårlig OOP. Jeg selv har ikke disse holdninger,
men med OOP er det jo som så meget andet: Hver sin smag.

> En af fordelene ved wxWidgets er at den bruger windows funktioner når
> det er muligt, så programmerne får samme udeseende som andre Windows
> apps, og har de samme features. Det er vist ikke tilfældet med gtk ?
Nu er jeg ikke den store kender udi Windows GUI, men GUI'en i dette
eksempel ligner da meget godt en Windows GUI?
http://www.ondotnet.com/pub/a/dotnet/2004/08/09/gtk_mono.htm

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409074
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste