# C/++ /MFC? ATL? - Anfänger



## soul710 (22. Januar 2006)

Ich entschuldige mich im vorhinein einmal für die evtl. etwas unglücklich ausgedrückten Anfängerfragen, ich bin noch nicht wirklich fit in Sachen C Programmierung.

Worum es mir geht: ich will mich in Sachen c++ bzw Win32 Programmierung informieren und  meine Kenntnisse darin vertiefen. 

Im Moment bin ich nur etwas.. sagen wir verwirrt. Ich weiß mit den Begriffen und Bibliotheken usw. noch nichts anzufangen und schmeiß das etwas durcheinander.
Erstmal zu den Grundlagen:
Im ersten Semester hatte ich c-grundlagen, wo kaum programmiert wurde, eher basics, dualsystem usw usw
Zweites Semester war kleine Konsolen-C-Programmierung, nicht sehr tiefgreifend.

Dann hat man uns leider 2 Semester gezwungen Java zu lernen, das bin ich mittlerweile zum Glück wieder los.

Dieses Semester gings dann los mit Win32 (API? SDK?) Programmierung. Da ich jetzt nicht weiß, "welcher Typ" von Win32 Programmierung das ist, lasst mich das beschreiben mit "da wo man die Controls per SendMessage ansteuert". Oder ist das überall so? Unser Prof meinte, man solle in der MSDN immer unter "Win32 SDK" guggn, also wirds das wohl sein. Um Mißverständnissen vorzubeugen hier der Quellcode eines kleinen Programms:
http://www.soul710.net/windows.cpp

Das - ich sag mal - "beste" was ich im Moment damit gemacht habe ist ein kleines Mailsystem, mit konsolen-Server auf Rechner A, und Win32 GUI für Clients. Hat mir ziemlich Spaß gemacht und ich würde da gern weitermachen.
Allerdings will ich mich auch in Sachen Beruf vllt in die Richtung bewegen (Beruf und Studium - eh schwieriges Thema bei mir), und will daher "den richtigen" Weg einschlagen. D.h. die bisherige Win32 Programmierung war in meinen Augen ziemlich umständlich. Wo ich bei Java (ich weiß, nicht zu vergleichen) Button b = new Button("Red"); schreibe, klicke ich mir das hier entweder im Ressourceneditor als Dialog zusammen, oder mach mir nen Button per CreateWindow(Ex) (umständlich?)

Nun geht weder das Skript der Vorlesung noch der Labore sonderlich weit, so dass ich nicht weiß, welche Vereinfachungen und Makros es hier gibt. Desweiteren tu ich mich oft schwer, Referenzen oder Dokumentationen zu einzelnen Problemen zu finden. Z.b. hatte ich für das Client Mailprogramm eine Tree-View eingebaut, und wollte herausfinden mit welchen Messages ich das ansteuern kann. Bin weder in der MSDN noch per google (nach was soll ich da suchen? "win32 sdk treeview messages"? dann krieg ich im zweifel alles, nur nicht das was ich will, u.U. noch Delphi Seiten..). Oft stolper ich dann über Code Stücke, die zwar auf den ersten Blick richtig sind, dann aber Ausdrücke beinhalten, die ich noch nie gehört habe, und daher nach meinem beschränkten Wissen doch nicht das sind was ich suche....

Nun bin ich oft über Begriffe wie MFC, ATL, VCL(?) gestolpert. So weit ich das verstanden habe, sind das Bibliotheken, die das Programmieren in Win32 vereinfachen. Eine Seite hatte das etwa so beschrieben:
Win32 API (= das was ich mache?) hat den Umfangreicheren Code, aber am Ende ein kleineres und schnelleres Programm, was viele Programmierer erreichen wollen. MFC hingegen vereinfach den Quellcode. Gerade in größeren Programmen soll MFC aber besser sein, da mit Win32 API das ganze schnell kompliziert und unübersichtlich wird.

Ist das so weit richtig? Neben MFC, ATL (= Visual Studio?), VCL(= Borland?) hab ich noch andere Sachen gesehn, qt und GTK wie mans von Linux/Unix kennt, und noch einige an die ich mich nicht erinnere.
Wenn die Prüfungen vorbei sind (= 12. Februar) werde ich mich weiter und tiefer mit C bzw C++ beschäftigen, u. a. auf jedenfall auch das hier zuende mache: 
http://www.cplusplus.com/doc/tutorial/introduction.html
(Das hat jetzt nich explizit was mit Win32 zu tun, hab die ersten Kapitel aber trotzdem verschlungen weils interessant und nützllich ist).

Nebenbei hab ich noch ein Buch über C++ und DX9, das werde ich auch weitermachen, da bin ich etwa bei 1/3.


Was die eigentliche, schlussendliche Frage hier ist: (  )
Was könnt ihr mir empfehlen (Tutorials? ungern Bücher - Themen? Webseiten? Referenzen?), was sollte ich mir anschauen in Sachen Programmierung ("ich möchte gleich richtig programmieren", also MFC? Win32 API? was anderes?)?
Sonstige Anregungen, Kritik, Tips?

Danke im Voraus.


----------



## Aiju (22. Januar 2006)

Es heißt Win32-API/SDK, beides ist richtig  Das mit dem SendMessage ist die native Windows-API (Win32-API), nicht zu empfehlen (sehr schwer, nicht plattformunabhängig) MFC ist eine Vereinfachung, auch von M$. Auch nicht zu empfehlen. Wenn du NUR für Windoof schreiben willst kann ich die VCL empfehlen. Wenn du auch für Linux, Mac, ... schreiben willst solltest du QT nehmen (http://www.trolltech.com)
Über ATL kannst du in der Wikipedia nachschlagen:


			
				de.wikipedia.org hat gesagt.:
			
		

> Bei der Active Template Library (ATL) handelt es sich um eine Sammlung von Visual C++-Klassenbibliotheken für Microsoft-Windows zur Erstellung von COM-Komponenten, einschließlich ActiveX-Steuerelementen.


Das mit den Anfängerfragen ist nicht so schlimm, jeder fängt einmal klein an (ich weiß noch gut wie ich mit 7 angefangen, vcl Programme zu schreiben)
Ach und: Entschuldige falls ich was in deinem Roman "überlesen" habe


----------



## soul710 (22. Januar 2006)

Danke schon mal für die Antwort. Ich habe mich zwar schon länger mit Linux/Unix beschäftigt, dort auch gescriptet usw., nutze im Moment aber (auch studiumsbedingt) nur Windows. Von daher ist "Windows-only" Programmierung nicht so schlimm, gute c/c++ Kenntnisse will ich mir trotzdem aneignen, und die haben ja nichts mit der Platform zu tun.

Ist QT Linux only, oder auch Windows? Wie siehts mit VCL aus? Wo "bekomm ich das her"? 
Arbeite im Moment mit Visual Studio.


----------



## Aiju (22. Januar 2006)

Qt ist plattformübergreifend, d.h. (fast) der selbe Code läuft auf Windoof, Linux, Mac ...
VCL kriegt man mit dem Borland Compiler. Ich würde jedoch die IDE empfehlen, Borland C++Builder.
http://www.borland.de


> c/c++ Kenntnisse will ich mir trotzdem aneignen, und die haben ja nichts mit der Platform zu tun.


In gewisser weise allerdings schon


----------



## soul710 (22. Januar 2006)

Aiju hat gesagt.:
			
		

> Qt ist plattformübergreifend, d.h. (fast) der selbe Code läuft auf Windoof, Linux, Mac ...
> VCL kriegt man mit dem Borland Compiler. Ich würde jedoch die IDE empfehlen, Borland C++Builder.
> http://www.borland.de




Ich hab mir auf der Borland Seite mal die Demo angeschaut, sieht ja schön aus muss man sagen.
Wie siehts denn da mit Dokumentation aus? Bei VS hab ich die MSDN, und bei Borland? 

Und wie ist das bei QT, welche IDE nehme ich da? Gibts nen besonderen Grund wieso du Borland VS vorziehst?

Hab mir eben auch mal die QT seite angeschaut, klingt auch alles sehr gut (  ), und man ist flexibler...
Ich denke QT werd ich mir anschauen.


----------



## Aiju (22. Januar 2006)

Borland hat eine SEHR gute Dokumentation, sogar nicht-Borland-Funktionen (STL, ANSI-C) sind ausführlich beschrieben.
Ich ziehe Borland M$ vor, aber nicht Qt. Für Qt fällt mir keine IDE ein. Man nimmt fürs Form-Designing Qt-Designer (allerdings habe ich in letzter Zeit nur mit der Konsole gearbeitet  )


----------



## Mr.Undertaker (23. Januar 2006)

Qt ist meiner Meinung nach eine gute Wahl, da es durch die konsequent durchgesetzte
Objektorientierte Programmierung übersichtlich und einfacher zu programmieren ist.

Leider ist Qt nicht frei, man muss also Gebühren (~1000 Euro) bezahlen, jedoch nur für 
*kommerzielle* Projekte.

Wenn du in C programmieren möchtest kann ich dir gtk2 fürs Fensterbauen empfehlen.
Das wäre sogar komplett frei, glaub ich zumindest .

Mit MFC komm ich persönlich absolut nicht zurecht und die WinAPI ist eigentlich nur für
kleine Sachen brauchbar. Mit .net hab ich noch nix gemacht 

Gruß, 
Christian

P.S:
API = Application Programming Interface
SDK = Software Development Kit


----------



## Endurion (24. Januar 2006)

Da du ja speziell Windows programmieren willst, würde ich zur Zeit sogar Richtung C# tendieren.

Was du gelernt hast, ist die pure Win32-API. Diese ist schon etwas in die Jahre gekommen und mit Tausenden Messages sehr unübersichtlich. Man kann dafür mächtig in die Trickkiste greifen und für Windows selbst ist ein halbwegs gutes Verständnis des System nie von Nachteil.

MFC ist dann eigentlich "nur" ein C++-Wrapper um die Win32-API drumrum. Mit dem zusätzlichen Gedanken, dass man immer eine Art Hauptfenster hat und sich alles in dessen Umkreis abspielt. Sobald man aus diesem Rahmen ausbrechen will, muss man sich in den Untiefen von MFC auskennen (oder über die Win32-API drumrumarbeiten). Eine Menge der professionellen Anwendungen sind mit MFC gebaut. MFC hat einen (meiner Meinung nach) Nachteil: Es wurde entworfen, als es die STL noch nicht gab. Deshalb gibt es praktisch für alle STL-Container ein Gegenstück in der MFC (z. Bsp.: std::string - CString). Der Umgang mit MFC ist durch die nahtlose Integration in Visual Studio recht einfach (Event-Handler werden auf Klick eingefügt, usw). Kann man durchaus mit arbeiten.

Die WTL ist ein Versuch, etwas MFC-Ähnliches mit Templates aufzuziehen. Sie ist aber leider von Microsoft (schreibt man übrigens mit S, lieber Aiju) nicht offiziell unterstützt.

C# ist letztlich eine eigene Programmiersprache. Diese bringt aber ähnlich Java eine mächtige Basisbibliothek mit, legt einem aber nicht so viele Stolperfallen in den Weg. Die Einrichtung von Event-Handlern bei Dialogen ist noch einfacher als bei MFC (und funktioniert auch besser). C# setzt auf die .NET-Plattform auf, welche ein offener Standard ist. Mit Mono gibt es ein Projekt, dass die .NET-Plattform auch auf Linux und Mac anbietet. Borland bietet auch Delphi für .NET an. Wenn man hier etwas umsichtig programmiert (evtl. nicht auf Windows.Forms, sondern auf ein offenes Äquivalent), kann man tatsächlich Programme schreiben, die man ohne zu kompilieren auf einem anderen System starten kann (und das klappt auch). Wenn du bei C# auf Windows bleiben willst, hilft dir ein Verständnis für die Win32-API bereits enorm.


----------

