/ 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
Gode MFC boeger
Fra : Andreas Schou Vaerge


Dato : 23-09-04 08:58

Da jeg overvejer at laere windows programmering leder jeg efter en god MFC
bog. Det skal understreges at jeg ikke har erfaring med MFC, men jeg har
kigget lidt paa windows programmering i windows API, under indflydelse af
Charles Petzold: "Programming Windows"

Saa er der nogle gode steder at begynde? Jeg har en del programmerings
erfaring saa bogen behoever ikke gaa ind i alle de grundlaeggende C++
ting.

Paa forhaand tak for hjaelpen

Andreas Vaerge

 
 
Mogens Hansen (23-09-2004)
Kommentar
Fra : Mogens Hansen


Dato : 23-09-04 16:51


"Andreas Schou Vaerge" <andreas@cs.auc.dk> wrote in message
news:ufwr7ota03u.fsf@homer.cs.aau.dk...
> Da jeg overvejer at laere windows programmering leder jeg efter en god MFC
> bog. Det skal understreges at jeg ikke har erfaring med MFC, men jeg har
> kigget lidt paa windows programmering i windows API, under indflydelse af
> Charles Petzold: "Programming Windows"

Den nogenlunde tilsvarende bog om MFC programmering hedder
Programming Windows with MFC, Second Edition
Jeff Prosise
ISBN 1-57231-695-0
Det er en udemærket bog, der lægger mere vækt på hvordan tingene virker end
hvordan man trykker på diverse Wizard i IDE miljøet.

En enkelt ting:
Hvorfor vil du gerne lære MFC ? (Du behøver ikke svare - bare tænk over det)
MFC er ikke specielt pænt designet eller nemt at gå til. Det ligger
temmeligt langt fra pæn C++.
Det er heller ikke længere Microsoft's anbefalede måde at udvikle
applikationer til MS-Windows. Microsoft promoverer .NET og WinForms.
Hvis man skal lave en Win32 applikation med GUI er Borland C++Builder langt
nemmere at bruge.
Personligt syntes jeg ikke der er grund til at lære MFC, med mindre man står
med en konkret opgave der skal løses.

Venlig hilsen

Mogens Hansen



Andreas Schou Vaerge (23-09-2004)
Kommentar
Fra : Andreas Schou Vaerge


Dato : 23-09-04 17:38

Foerst en undskyldning til Mogens Hansen, da jeg ramte forkert paa min news
reader og svarede pr. mail. Beklager meget.

>>>>> "Mogens" == Mogens Hansen <mogens_h@dk-online.dk> writes:

Mogens> En enkelt ting: Hvorfor vil du gerne lære MFC ? (Du behøver
Mogens> ikke svare - bare tænk over det) MFC er ikke specielt pænt
Mogens> designet eller nemt at gå til. Det ligger temmeligt langt fra
Mogens> pæn C++. Det er heller ikke længere Microsoft's anbefalede
Mogens> måde at udvikle applikationer til MS-Windows. Microsoft
Mogens> promoverer .NET og WinForms. Hvis man skal lave en Win32
Mogens> applikation med GUI er Borland C++Builder langt nemmere at
Mogens> bruge. Personligt syntes jeg ikke der er grund til at lære
Mogens> MFC, med mindre man står med en konkret opgave der skal løses.

Okay jeg har kigget paa winforms, og maa give dig ret. Det er noget
paenere end MFC, saa det bliver nok den vej jeg gaar. Har du (eller
andre) et bud paa enten nogle gode (c++) tutorials paa nettet (har
googlet lidt, men syntes ikke rigtig at kunne finde noget brugbart),
eller en god bog.



Bertel Brander (23-09-2004)
Kommentar
Fra : Bertel Brander


Dato : 23-09-04 18:51

Mogens Hansen wrote:

> Hvis man skal lave en Win32 applikation med GUI er Borland C++Builder langt
> nemmere at bruge.

Om Builderen er langt nemmere at bruge end MFC, er vel et spørgsmål om
smag og behag.
For mig er er både Builderens VCL og Microsofts MFC forældede
teknikker, der ikke er særlig pæne set ud fra et C++ synspunkt.
Så jeg mener ikke at man bør anbefale Builderen som et bedre
alternativ til MFC.

--
What's in a name?
That which we call a rose by any other name would smell as sweet.
- Juliet
http://home20.inet.tele.dk/midgaard/

Mogens Hansen (23-09-2004)
Kommentar
Fra : Mogens Hansen


Dato : 23-09-04 21:03


"Bertel Brander" <bertel@post4.tele.dk> wrote in message
news:41530d01$0$247$edfadb0f@dread16.news.tele.dk...
> Mogens Hansen wrote:
>
> > Hvis man skal lave en Win32 applikation med GUI er Borland C++Builder
langt
> > nemmere at bruge.
>
> Om Builderen er langt nemmere at bruge end MFC, er vel et spørgsmål om
> smag og behag.

Hvorfor mener du det ?
De er væsentligt forskellige.

Hvis man sammenligner WinForm med VCL vil man (ikke overraskende eller
tilfældigt) se at de er _meget_ ens.
Hvis antager at mange (inkl. Microsoft) mener at WinForm er langt nemmere at
bruge end MFC, må den samme flok komme til at at VCL er er langt nemmere at
bruge end MFC.

> For mig er er både Builderens VCL og Microsofts MFC forældede
> teknikker, der ikke er særlig pæne set ud fra et C++ synspunkt.

Hvad vil du anbefale ?

> Så jeg mener ikke at man bør anbefale Builderen som et bedre
> alternativ til MFC.

Hvorfor ?

Venlig hilsen

Mogens Hansen



Bertel Brander (23-09-2004)
Kommentar
Fra : Bertel Brander


Dato : 23-09-04 21:46

Mogens Hansen wrote:
> "Bertel Brander" <bertel@post4.tele.dk> wrote in message
> news:41530d01$0$247$edfadb0f@dread16.news.tele.dk...
>
>>Mogens Hansen wrote:
>>
>>
>>>Hvis man skal lave en Win32 applikation med GUI er Borland C++Builder
>
> langt
>
>>>nemmere at bruge.
>>
>>Om Builderen er langt nemmere at bruge end MFC, er vel et spørgsmål om
>>smag og behag.
>
>
> Hvorfor mener du det ?

Jeg finder det lettest at lave windows applikationer med
ren Win32Api programmering, fordi der ikke er noget støj
mellem min kode og det egentlige API.
Det kan dog være lettere at lave sine første forsøg med
windows programmer ved at bruge et at C++ bibliotekerne.

> De er væsentligt forskellige.

Ja og nej.

>
> Hvis man sammenligner WinForm med VCL vil man (ikke overraskende eller
> tilfældigt) se at de er _meget_ ens.
> Hvis antager at mange (inkl. Microsoft) mener at WinForm er langt nemmere at
> bruge end MFC, må den samme flok komme til at at VCL er er langt nemmere at
> bruge end MFC.

Jeg kender ikke WinForm's.

Jeg har leget lidt med Borlands VCL, og synes ikke om det.
Blot en simpel ting som at man ikke kan alokere almindelige
objekter på stakken, og at man samtidig bruger exceptions
alle/mange steder.

>>For mig er er både Builderens VCL og Microsofts MFC forældede
>>teknikker, der ikke er særlig pæne set ud fra et C++ synspunkt.
>
>
> Hvad vil du anbefale ?

Jeg har før peget på wxWindows/wxWidgets, andre mener at QT er
bedre.
Der findes desværre ingen perfekte biblioteker til C++ og
windows.

>
>>Så jeg mener ikke at man bør anbefale Builderen som et bedre
>>alternativ til MFC.
>

Fordi:
1: VCL er ikke kønt designet, det ligger på mange punkter
langt fra C++.
2: VCL bliver kun supporteret af Borland, og jeg er ikke
sikker på at Borland vil fortsætte med VCL.

--
What's in a name?
That which we call a rose by any other name would smell as sweet.
- Juliet
http://home20.inet.tele.dk/midgaard/

Mogens Hansen (23-09-2004)
Kommentar
Fra : Mogens Hansen


Dato : 23-09-04 23:05


"Bertel Brander" <bertel@post4.tele.dk> wrote in message
news:41533609$0$247$edfadb0f@dread16.news.tele.dk...

[8<8<8<]
> Jeg finder det lettest at lave windows applikationer med
> ren Win32Api programmering, fordi der ikke er noget støj
> mellem min kode og det egentlige API.

Der er en masse steder i Win32 med manglende type check, som gør det mere
usikkert end nødvendigt.
Det er sværere at tilknytte data til hvert vindue.
Message er nemt at lave forkert.

[8<8<8<]
> Jeg har leget lidt med Borlands VCL, og synes ikke om det.
> Blot en simpel ting som at man ikke kan alokere almindelige
> objekter på stakken,

Jeps - det er underligt og generende.
Forklaringen er kompatibilitet med Delphi - det er både en styrke og
svaghed.

"std::auto_ptr" er dog en hjælp i den sammenhæng, idet den sikrer
nedlæggelse lige så simpelt som almindeligt stak-allokerede objekter:
auto_ptr<MyForm> form(new MyForm(this));

> og at man samtidig bruger exceptions
> alle/mange steder.

Det har jeg ikke bemærket som et problem.

Derimod har jeg bemærket at den f.eks. fanger "General Protection Fault",
laver det om til en exception som fører til at en dialog vises, hvorefter
programmet kører ufortrådent videres.
Det er efter min mening misforstået hjælpsomhed - det er langt bedre at
terminere programmet, når man er kommet i en ukendt tilstand.


[8<8<8<]
> 2: VCL bliver kun supporteret af Borland, og jeg er ikke
> sikker på at Borland vil fortsætte med VCL.

Det er Borland heller ikke sikker på
De siger at der vil komme en officiel udmelding om det senest 15. december
2004

Venlig hilsen

Mogens Hansen



Bertel Brander (23-09-2004)
Kommentar
Fra : Bertel Brander


Dato : 23-09-04 23:17

Mogens Hansen wrote:
>
>>og at man samtidig bruger exceptions
>>alle/mange steder.
>
>
> Det har jeg ikke bemærket som et problem.

Det er et problem hvis man laver kode som:

TRegistry *reg = new TRegistry();
reg->RootKey = HKEY_CURRENT_USER;
if(reg->OpenKey("\\Software\\Microsoft\\Notepad", false))
{
int Val = reg->ReadInteger("iMarginBottom");
Val++;
reg->WriteInteger("iMarginBottom", Val);
reg->CloseKey();
}
delete reg;

Og ReadInteger synes at den skal lave en exception.

Man kan naturligvis bruge en auto_ptr, men hvor
mange nybegyndere ved det og tænker over det?
Alternativet er at bruge try/catch, men det var lettere
at lave reg på stakken.

--
What's in a name?
That which we call a rose by any other name would smell as sweet.
- Juliet
http://home20.inet.tele.dk/midgaard/

Ivan Johansen (24-09-2004)
Kommentar
Fra : Ivan Johansen


Dato : 24-09-04 07:42

Bertel Brander wrote:
> Jeg har før peget på wxWindows/wxWidgets, andre mener at QT er
> bedre.

Jeg har kun kigget lidt på wxWidgets. Jeg bruger i øjeblikket BCB med
VCL men har overvejet at skifte til wxWidgets. Jeg synes dog at
wxWidgets ser noget forældet ud. Det ligner meget MFC og det ser ud til
at de går mere op i at understøtte forældede compilere end at bruge
moderne C++. wxWidgets bruger ikke exceptions og er ikke exception safe.
For mig at se er VCL et langt bedre C++ library end wxWidgets, på trods
af at VCL er skrevet i Delphi.

> Fordi:
> 1: VCL er ikke kønt designet, det ligger på mange punkter
> langt fra C++.

Hvad mener du med det? Jeg synes det er meget pænt designet og i de
fleste tilfælde er jeg ligeglad med hvilket sprog et library er skrevet
i. Det er rigtigt at der er et par småting man skal være opmærksom på
(VCL-objekter kan ikke oprettes på stakken f.eks.), men jeg kan ikke se
at det ligger langt fra C++.

Ivan Johansen

Bertel Brander (24-09-2004)
Kommentar
Fra : Bertel Brander


Dato : 24-09-04 18:32

Ivan Johansen wrote:

> Bertel Brander wrote:
>
>> Jeg har før peget på wxWindows/wxWidgets, andre mener at QT er
>> bedre.
>
>
> Jeg har kun kigget lidt på wxWidgets. Jeg bruger i øjeblikket BCB med
> VCL men har overvejet at skifte til wxWidgets. Jeg synes dog at
> wxWidgets ser noget forældet ud. Det ligner meget MFC og det ser ud til
> at de går mere op i at understøtte forældede compilere end at bruge
> moderne C++. wxWidgets bruger ikke exceptions og er ikke exception safe.
> For mig at se er VCL et langt bedre C++ library end wxWidgets, på trods
> af at VCL er skrevet i Delphi.

wxWidgets har to store fordele frem for VCL og BCB:
1: Det er opens souce
2: Det kører med mange kompilere på mange platforme.

>
>> Fordi:
>> 1: VCL er ikke kønt designet, det ligger på mange punkter
>> langt fra C++.
>
>
> Hvad mener du med det? Jeg synes det er meget pænt designet og i de
> fleste tilfælde er jeg ligeglad med hvilket sprog et library er skrevet
> i. Det er rigtigt at der er et par småting man skal være opmærksom på
> (VCL-objekter kan ikke oprettes på stakken f.eks.), men jeg kan ikke se
> at det ligger langt fra C++.
>

Man kan naturligvis altid diskutere hvad der er pænt designet, man
har måske en tendens til at synes at det man har brugt meget er pænt.
Jeg synes ikke at VCL er logisk, det tog mig f.ex. nogen tid at regne
ud at man satte fonten til fed på en control med:

Whatever->Font->Style = TFontStyles() << fsBold;

Det var måske mere logisk at skrive:
Whatever->Font->Style |= fsBold;
eller
Whatever->Font->Style->Set(fsBold);

Min hovedindvending mod BCB og VCL er stadig at det
kun understøttes af Borland og at Borland måske
ikke vil fortsætte af det spor. Så jeg mener ikke
at man bør starte på at bruge VCL i dag til (store)
nye projecter, eller hvis man skal lære at programmere.

--
What's in a name?
That which we call a rose by any other name would smell as sweet.
- Juliet
http://home20.inet.tele.dk/midgaard/

Ivan Johansen (24-09-2004)
Kommentar
Fra : Ivan Johansen


Dato : 24-09-04 19:25

Bertel Brander wrote:
> wxWidgets har to store fordele frem for VCL og BCB:
> 1: Det er opens souce
> 2: Det kører med mange kompilere på mange platforme.

Det var også af de grunde at jeg overvejede at skifte.

> Man kan naturligvis altid diskutere hvad der er pænt designet, man
> har måske en tendens til at synes at det man har brugt meget er pænt.
> Jeg synes ikke at VCL er logisk, det tog mig f.ex. nogen tid at regne
> ud at man satte fonten til fed på en control med:

Jeg synes overordnet at VCL er pænt designet uden at være perfekt. Der
nogle små særheder og dit eksempel er et af dem. Det er dog ikke noget
jeg støder på særligt ofte. Når jeg umiddelbart kigger på wxWidgets ser
det meget gammeldags ud. Så synes jeg QT ser mere moderne ud, men jeg
synes ikke at Windows-programmer lavet med QT ser "rigtige" ud.

> Min hovedindvending mod BCB og VCL er stadig at det
> kun understøttes af Borland og at Borland måske
> ikke vil fortsætte af det spor. Så jeg mener ikke
> at man bør starte på at bruge VCL i dag til (store)
> nye projecter, eller hvis man skal lære at programmere.

Det er jeg sådan set enig i, det var bare ikke den begrundelse du
brugte. Usikkerheden fra Borlands side er uacceptabel, men VCL er stadig
et godt library.

Ivan Johansen

Mogens Hansen (24-09-2004)
Kommentar
Fra : Mogens Hansen


Dato : 24-09-04 20:56


"Bertel Brander" <bertel@post4.tele.dk> wrote in message
news:41545a18$0$200$edfadb0f@dread11.news.tele.dk...

[8<8<8<]
> wxWidgets har to store fordele frem for VCL og BCB:
> 1: Det er opens souce
> 2: Det kører med mange kompilere på mange platforme.

Alt andet lige er det 2 gode egenskaber - men alt andet er ikke lige.

[8<8<8<]
> Man kan naturligvis altid diskutere hvad der er pænt designet, man
> har måske en tendens til at synes at det man har brugt meget er pænt.

I det store hele syntes jeg at VCL er pænt designet, og nemt at gå til.
Det er ikke perfekt - få ting er.

> Jeg synes ikke at VCL er logisk, det tog mig f.ex. nogen tid at regne
> ud at man satte fonten til fed på en control med:
>
> Whatever->Font->Style = TFontStyles() << fsBold;

Ja, det er hverken specielt pænt eller intuitivt. Man skal nok kende Delphi
baggrunden for at værdsætte det
Ofte sætter man det op grafisk via Object Inspector'en - og så er det
ligemeget.
Hvis man skal sætte det op programmatisk, så kan man gøre det når man een
gang har set hvordan.
Ved at stille sig på propertien "Font" og trykke F1 er der ikke langt til et
eksempel der viser præcis hvordan det gøres.

For lige at sætte tingene i relation til det oprindelige spørgsmål, har du
så overvejet hvordan man gør det tilsvarende i MFC (eller Win32 API'et) ?
Jeg slog det op på side 339 i den MFC bog jeg henviste til.
Her er det væsentligste af det

if((HFONT) m_fontSample != NULL)
m_fontSample.DeleteObject();
//...
m_fontSample.CreateFont( en _masse_ parametre );
m_wndSampleText.SetFond(&m_fontSample);

og husk så lige at kalde "m_fontSample.DeleteObject()" når vinduet
nedlægges.
Hvad hvis kaldet til CreateFont fejler, når den gamle font allerede er
nedlagt ?
Udover at være komplekts er det en usikker kode stil.

Det er vist ikke helt urimeligt når jeg sagde at VCL er langt nemmere at gå
til end MFC.

[8<8<8<]
> Min hovedindvending mod BCB og VCL er stadig at det
> kun understøttes af Borland og at Borland måske
> ikke vil fortsætte af det spor.

Man afhænger af sine afhængigheder, og man slipper ikke for afhængigheder.
Man skal opveje fordele og ulemper, og gøre op med sig selv og projektet om
man kan tillade risikoen.

> Så jeg mener ikke
> at man bør starte på at bruge VCL i dag til (store)
> nye projecter,

Jeg er for så vidt enig med dig - det er dog ikke en design mæssig årsag,
men en strategisk overvejelse der ligger til grund.
Som jeg sagde i mit oprindelige indlæg er VCL et lettere tilgængeligt
alternativ til MFC hvis man skal lave Win32 applikationer.
Med hensyn til fremtidssikring, så er man i værste fald lige dårligt stillet
med MFC og VCL - i bedste fald er man bedre stillet med VCL.

Uanset valg af bibliotek, vil det til store projekter af mange grunde være
fornuftigt at gøre så meget af applikationen som muligt uafhængig af GUI
biblioteket. Det betyder f.eks. at man bør undgå at benytte klasser som
CString (i MFC) eller AnsiString (i VCL) men istedet benytte "std::string",
selvom det giver noget irriterende typekonvertering rundt omkring.
Se eventuelt bogen
Large Scale C++ Software Design
John Lakos
ISBN 0-201-63362-0
for nyttigte råd i forbindelse med design af store projekter.

Hvis det er et lille projekt, spiller afhængigheder en mindre rolle, og man
skal egentlig bare koncentrere sig om at se at få løst opgaven, og smide det
hele væk hvis man ikke kan leve med afhængighederne.

> eller hvis man skal lære at programmere.

Det man lærer ved at anvende VCL er i høj grad nyttigt hvis man vil anvende
WinForm og andre dele af .NET.


Det grundliggende problem er at det ideele GUI bibliotek til C++ ikke
findes.

Venlig hilsen

Mogens Hansen



Bertel Brander (24-09-2004)
Kommentar
Fra : Bertel Brander


Dato : 24-09-04 21:08

Mogens Hansen wrote:

> Det grundliggende problem er at det ideele GUI bibliotek til C++ ikke
> findes.
>

Jeg bliver mere og mere overbevist om at VI bør lave det

--
What's in a name?
That which we call a rose by any other name would smell as sweet.
- Juliet
http://home20.inet.tele.dk/midgaard/

Mogens Hansen (25-09-2004)
Kommentar
Fra : Mogens Hansen


Dato : 25-09-04 17:12


"Mogens Hansen" <mogens_h@dk-online.dk> wrote in message
news:cj1u4b$1heb$1@news.cybercity.dk...

[8<8<8<]
> For lige at sætte tingene i relation til det oprindelige spørgsmål, har du
> så overvejet hvordan man gør det tilsvarende i MFC (eller Win32 API'et) ?
> Jeg slog det op på side 339 i den MFC bog jeg henviste til.
> Her er det væsentligste af det
>
> if((HFONT) m_fontSample != NULL)
> m_fontSample.DeleteObject();
> //...
> m_fontSample.CreateFont( en _masse_ parametre );
> m_wndSampleText.SetFond(&m_fontSample);
>
> og husk så lige at kalde "m_fontSample.DeleteObject()" når vinduet
> nedlægges.
> Hvad hvis kaldet til CreateFont fejler, når den gamle font allerede er
> nedlagt ?
> Udover at være komplekts er det en usikker kode stil.

I .NET (WinForms) skal man skrive
this->label1->Font = new System::Drawing::Font(...,
System::Drawing::FontStyle::Bold, ...);

Det er lidt pænere end MFC, og Garbage Collectoren hjælper med at gøre det
sikkert.
Men jeg syntes ikke det er lige så simpelt og direkte som VCL - på trods af
særheden som skyldes Delphi indflydelsen.

Venlig hilsen

Mogens Hansen



Per Abrahamsen (28-09-2004)
Kommentar
Fra : Per Abrahamsen


Dato : 28-09-04 11:20

Bertel Brander <bertel@post4.tele.dk> writes:

> Mogens Hansen wrote:
>
>> Det grundliggende problem er at det ideele GUI bibliotek til C++ ikke
>> findes.
>
> Jeg bliver mere og mere overbevist om at VI bør lave det

Har I kigget på gtkmm? Ud fra et rent C++ synspunkt er det noget nær
perfekt, da jeg først prøvede det havde jeg klart den opfattelse at
det var det toolkit der demonstrerede hvordan jeg hele tiden havde ment
et C++ toolkit burde se ud. Det duplikerer for eksempel ikke noget
som kan finde i standard C++ biblioteket.

Desværre var det *for* perfekt, udviklerne havde for travlt med at
finde den perfekte API til at bruge til på småting som for eksempel en
*stabil* API, ordentlig dokumentation, eller funktionalitet (omend det
selvfølgelig "arver" en masse funktionalitet fra gtk+). SÅ jeg
skiftede til Qt der er udviklet til "C med klasser", duplikerer
standard C++ biblioteket, men har fremragende dokumentation, en stabil
API, og masser af funktionalitet. Og en ikke helt ringe design under
de begrænsninger "C med klasser" lægger.

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

Månedens bedste
Årets bedste
Sidste års bedste