winapi, vcl oder mfc?



  • adonis schrieb:

    noch bin ich zwar nicht soweit, hänge noch am c++ und oop lernen,
    aber kann ja nicht schaden sich schonmal schlau zu machen:)

    Dann mach dir darüber noch keine Gedanken. Bis du mit GUI Programmierung anfangen solltest, dauert es noch...

    WinAPI: Lass blos die Finger davon. Erstens ist die mittlerweile eh Geschichte und neue Windows-Versionen werden die nur noch zur kompatibilität mitliefern. Zweitens versaut so etwas dir als Anfänger total den Programmierstil.

    MFC: Lass blos die Finger davon. Erstens ist die mittlerweile eh Geschichte und Microsoft fährt mit .NET und C++/CLI eine andere Strategie. Zweitens ist die MFC sehr schlechtes C++ und versaut dir sehr wahrscheinlich auch den Programmierstil

    VCL: Keine Ahnung. Bei dem was ich aber von dem Borland Compiler weiß, lass blos die Finger davon. Der ist nicht sehr standard kompatibel.

    Aber wie gesagt, mach dir über GUI am besten noch gar keine Sorge.



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • kingruedi schrieb:

    adonis schrieb:

    noch bin ich zwar nicht soweit, hänge noch am c++ und oop lernen,
    aber kann ja nicht schaden sich schonmal schlau zu machen:)

    Dann mach dir darüber noch keine Gedanken. Bis du mit GUI Programmierung anfangen solltest, dauert es noch...

    WinAPI: Lass blos die Finger davon. Erstens ist die mittlerweile eh Geschichte und neue Windows-Versionen werden die nur noch zur kompatibilität mitliefern. Zweitens versaut so etwas dir als Anfänger total den Programmierstil.

    MFC: Lass blos die Finger davon. Erstens ist die mittlerweile eh Geschichte und Microsoft fährt mit .NET und C++/CLI eine andere Strategie. Zweitens ist die MFC sehr schlechtes C++ und versaut dir sehr wahrscheinlich auch den Programmierstil

    VCL: Keine Ahnung. Bei dem was ich aber von dem Borland Compiler weiß, lass blos die Finger davon. Der ist nicht sehr standard kompatibel.

    Aber wie gesagt, mach dir über GUI am besten noch gar keine Sorge.

    MFC und WinAPI sind nicht wirklich Geschichte und werden auch weiterhin supported. Die "Strategie" ist durch aus gut gelungen.

    Meines erachtens nach kommt man als Anfänger ambesten weg wenn man GTKmm verwendet das eine sehr schöne API hat.

    Alternativ wenn es nur für Windows sein sollte, sind die WinForms mit C++/CLI (Am besten mit Microsoft Visual Studio.Net 2005 bzw Microsoft Visual C++.Net 2005 Express) sehr gut, da man mit Hilfe des Designers schöne Ergebnisse auch auch mit noch nicht so fundierten C++ Kentnissen erzielen kann.

    BR
    Vinzenz



  • evilissimo schrieb:

    MFC und WinAPI sind nicht wirklich Geschichte und werden auch weiterhin supported. Die "Strategie" ist durch aus gut gelungen.

    Über Legacy-Support. Das bedeutet nur, dass das Knowhow nicht so schnell verfällt. Aber es ist einfach Schwachsinning noch Zeit und Energie in die Libraries zu investieren. Besonders wenn man mit dem Anspruch an die Sache geht, dass einem die WinAPI zeigen würde wie Windows funktioniert und sie dann nur ein emulierter Layer ist.

    Persönlich würde ich eher fltk als GTKmm empfehlen. Das läuft weniger problematisch auch auf Windows und Mac OS X und ist nicht so fett.



  • kingruedi schrieb:

    Besonders wenn man mit dem Anspruch an die Sache geht, dass einem die WinAPI zeigen würde wie Windows funktioniert und sie dann nur ein emulierter Layer ist.

    Du willst jetzt aber nicht behaupten das hinter der WinAPI dann die WinForms direkt stehen würden, oder?
    Das wäre nämlich falsch ^^

    Im übrigen, zumindest ist es derzeit so, wenn man funktionen die in der WinAPI vorhanden sind in WinForms vermisst, kann man dann mittels der WinAPI die WinForms Controls um Funktionalität erweitern. Wie das in Vista in was weiß ich wieviel Monaten aussehen wird sei mal dahin gestellt, aber dennoch ist die WinAPI und auch MFC noch sehr stark im Einsatz und Microsoft wird den Support dafür ganz bestimmt nicht so schnell einstellen 😉

    BR
    Vinzenz



  • Wer die MSDN verfolgt, weiß das das meiste neue in Vista in der WinAPI realisiert wurde. Z.B. so Sachen wie neue Standard-Dialoge sind im PlatformSDK neu dazu gekommen. Nichts mit .NET! Selbst die neue GUI ist weiterhin WinAPI. WinFX ist nur ein Wrapper drauf.

    ABER, deshalb sollte man trotzdem nicht direkt die WinAPI ansprechen, sondern nur über Wrapper. Dazu gehören im schlechten Fall die MFC, oder im besseren modernere C++-Toolkits wie Smartwin. wxWidgets wird ebenfalls viele Vista-Features anbieten, wenn auch nicht morgen. Sie werden aber sicher nachziehen.

    gtkmm hat zwar ein geniales C++-Design, aber für einen Anfänger ist es einfach zu komplex. Vorallem als Windows-Entwickler wird man im Regen stehen gelassen.

    fltk2 und Smartwin sind für einen Anfänger ein sehr schöner Einstieg, weil sie die minimalen Anforderungen erfüllen und trotzdem nicht den Stil versauen. OK, an fltk2 stören mich immer noch ein paar Sachen, z.B. haben die fltk-Jungs immer noch nichts von String-Klassen gehört.



  • mal so nebenbei, hier fällt ziehmlich oft, programmierstil
    versauen.

    was zum teufel ist programmierstil?
    und was ist "Der Richtige Stil"?

    stil is für mich Struktuierter aufbau, was mir noch etwas schwer
    fällt. und schriftbild würde für mich noch zum stil zählen.

    meine programme sind immer gleich aufgebaut

    ///include///
    
    ///funktionsprototypen///
    
    ///macros///
    
    ///globals///
    
    ///main funk///
    
    ///restlichen funktionen///
    

    stil ist vielleicht auch noch keine sprachmischungen, aber da blick ich garnich
    mehr durch, was ist nun c, was c++. in vielen büchern wird ständig
    gemischt, ok man erkennt es an den include dateien, aber scheint
    auch was mit der schreibweise zu tun zu haben.

    es macht mir zwar spass programmieren zu lernen, aber verliere
    so langsam den überblick.

    zich header dateien die ich includen muss und mir dann
    ethliche male dieselbe funktion zur verfügung steht nur
    mit anderem namen und etwas anderer schreibweise.

    tausend mögichkeiten der gui erstellung, und keins scheint nun
    das "non plus ultra" zu sein, vieles scheint ne geschmackssache zu sein,
    und richtet sich anscheinend nicht hauptsächlich danach, was man
    man machen will.

    wie behaltet ihr da noch den überlick.

    nen wirklichen standart gibt es wohl nicht, so kommt es mir zumindest vor.



  • Mit Programmierstil ist eigentlich alles gemeint. Man kann jetzt nicht sagen: "wie man die Klassennamen benennt"

    Der erste wichtigste Programmierstil ist (meiner Meinung nach): ob man C-Features nutzt, obwohl es bessere C++-Features gibt. Wenn ich C über C++ Features bevorzuge, brauch ich auch kein C++ programmieren. Meine Meinung.

    Wenn ich in C++ keine Möglichkeit habe, und diese in C vorhanden ist... gut, dann benutze ich das C-Feature.

    Aber um mal eine Sache bzw. ein Probleme der schlechten C++-Libs klarer zu machen:

    #define MAXIMALE_FENSTER 256
    

    Das ist ein Makro, und solche Makros verursachen während der Programmierung bzw. Benutzung Ärger. Weil der Compiler MAXIMALE_FENSTER nie im Leben kennen wird. Ein guter C++ Programmierstil ist aber das:

    const int MAXIMALE_FENSTER = 256;
    

    Das ist eines der simpleren Beispiele, wo viele C++ Libraries und auch C++ Programmierer es anscheinend nicht hinbekommen. Anscheinend weil die Lib älter als der C++ Standard ist (ist entschuldigt, aber dann bitte auch nach so vielen Jahren diesen Mist ausbessern!!!) oder weil die C++ Programmierer vorher C gelernt haben!

    Es gibt auch solche tollen Sachen wie, das einige Libs noch Messagemaps benutzen. Messagemaps bestehen ausschliesslcih aus Makrowüsten. MFC macht das heute noch. Zu C++-Urzeiten mag es keine andere gute Möglichkeit gegeben haben. Aber heute?

    wxWidgets hat das z.B. auch mit den Messagemaps. Aber, bei wxWidgets haben sich die wx-Entwickler auf Druck der wx-Nutzer ans Herz gefasst, und bieten bessere Alternativen an. Man sieht: es geht! 👍

    Die WinAPI ist nochmal ein anderes Thema: es ist C. D.h. als C++ Programmierer siehts du C-Stil und wirst denken: "Hui, die machen das auch so." Ja, aber für einen C++ler ist es nicht das weshalb wir C++ nutzen. Deshalb wrappen MFC, wxWidgets, SmartWin, WTL u.a. diese WinAPI in C++. Gut, einige wrappen das besser, die anderen schlechter. 😉

    was ist nun c, was c++. in vielen büchern wird ständig
    gemischt,

    Eben! Das ist schlechter Stil! Warum? Weil der Buchautor anscheinend vorher C programmiert hat, und es selbst anscheinend noch nicht geschafft hat, in der C++ Welt anzukommen. Nur weil er ein Buch geschrieben hat, heißt das nicht, das er fit in C++ ist. Es gibt schlechte C++-Bücher und es gibt gut. Und gute C++ Einsteigerbücher gibt es verdammt wenige! Leider.

    Einen Standard für GUIs gibt es in C++ nicht. Und das wird sich auch nicht ändern (in diesem Jahrzent zumindest). Vielleicht hilft dir diese Übersicht aber etwas weiter:
    http://www.kharchi.de/cpp_gui.html

    Zu den ganzen Headern: diese muß man sich nicht alle merken. Ich sage immer: man muß nicht wissen wie, man muß nur wissen wo es steht. 😃 Soll heißen, ich weiß z.B. das es die Klasse stringstream gibt, aber ich vergesse immer wieder in welchem Header sie drin ist. Dann schau ich halt nach in einer Dokumentation (Buch oder online im Internet). Es gibt zwar Header die man täglich benutzt, und diese merkt man sich automatisch. Aber es ist keine Schande andere in einer Doku nachzuschauen. Was nützt es, wenn man 100 Headers auswendig kennt, aber daran scheitert neue Headers zu finden, weil man zu doof ist mit Dokumentationen umzugehen? 🙄 Also merke ich mir lieber nur 20 Header, und bin dafür fix, wenn ich nach neuen Headern nachschaue.

    zich header dateien die ich includen muss und mir dann
    ethliche male dieselbe funktion zur verfügung steht nur
    mit anderem namen und etwas anderer schreibweise.

    Hast du ein Beispiel? Weil eigentlich dürfte das mit dem "selber Funktion, andere Schreibweise" eher nicht die Regel sein. Wenn, dann nur, weil man mehrere unterschiedliche Libs benutzt. Und diese Überschneidungen haben können.



  • puuhh, ich hab mir mal die seite angeguckt, alles sehr klicken
    zusammenklicken.

    deswegen hatte ich mich mit der winapi beschäftigt und hatte da
    alles selber geschrieben. da hab ich auch gesehen das alles ein fenster
    ist, jeder button jeder checkbos etc, und auch gesehen wo sie vom
    ablauf her hinkommen, und der zusammenhang mit der nachrichtenschleife.

    und meine verantwortung des ständigen neuzeichnens des fensters
    bei änderungen und was man alles da noch alles beachten muss.

    kingruedi meint da man da wohl nicht viel lernen würde, wie alles funktioniert,
    aber dadurch das winapi längerer code is sieht man auch mehr,

    allein ein fensterobjekt erstellen, wo man erstmal sieht, was ein
    fenster an elementen hat, das man dieses fenster bei windows registrieren
    muss usw.

    ich weiss nicht ob ich da falsch rangehe, aber grundsätzlich will
    ich alles selber schreiben und lernen, und wenn ich das kann,
    dann würd ich son baukastensystem benutzen.

    so hatte ich das bisher immer gemacht, auch beim webseiten erstellen,
    erstmal mit texteditor alles könnten und dann sowas wie dreamweaver,
    golive etc benutzen, und bin mit der methode eigendlich auch immer
    gut zurecht gekommen, wenn etwas mal nicht so lief wie ich es wollte,
    ein blick in quell code und die sache war klar.
    ---------------------------------------------------------------------

    mit den zich headern und selben funktionen meinte ich,
    das ich zich befehle nutzen kann um etwas auf dem bildschirm
    auszugeben, gleiches gilt für eingabe,
    oder datei operationen, zich tutorials alle machen dasselbe,
    alle anders geschrieben. wo bei es dann natürlich vorkommen
    kann man man mal ne header zuviel einbindet.

    muss sagen ist alles ganz schön komplex, da muss ich mir wohl nen weg
    drchschlagen.

    was ich aber trozdem zugeben muss, das mir das ganze doch sehr gefällt,
    1000 wege fürn rom, es gibt nich nur "den einen weg", um mit
    c++ etwas zu realisieren.
    ----------------------------------------------------------------------

    beschäftige mich erst seit 4wochen richtig intensiv mit c++
    (leider sind die ferien bald vorbei und dann heisst es java).

    und mal ein danke an euch, ohne euch hätte ich in der zeit
    wohl nich ganz so viel geschafft:)



  • also hier vielleicht mal grundprogramm von vcl und mfc

    MFC

    #include <afxwin.h>
    
    class CFenster : public CFrameWnd
    {
      public:
        CFenster() {Create(NULL,_T("Mini"));}
    };
    
    class CMeinProgramm : public CWinApp
    {
      public:
        virtual BOOL InitInstance();
    }
    
    BOOL CMeinProgramm::InitInstance()
    {
       m_pMainWnd = CFenster();
       m_pMainWnd->ShowWindow(m_nCmdShow);
       return TRUE;
    }
    

    VCL

    #include <vcl,h>
    #pragma hdrstop
    USES("project1.res")
    
    WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
    {
      try
       {
         Application->Initialize();
         Application->CreateForm(__classis(TForm1),
                                 &Form1);
         Application Run();
       }
       catch (Execption &exeption)
       {
         Application->ShowExeption(&exeption);
       }
       return 0;
    }
    

    sind beide schön kurz, aber grosse erkenntnisse
    gewinne ich daraus nich.

    winapi bin ich jetzt zu faul zu:)
    die anderen hab ich mir noch nicht angeguckt



  • hmm das "richtige" finden ist meiner Meinung nach flexibel den Projecten anzupassen. Im Verlauf meines Studium, haben wir mit C begonnen, mit C++ weitergemacht und danach gings in die GUI Programmierung per WinAPI und danach weiter mit der MFC. Es wurden nur kurz Alternativen vorgestellt wie GTK... aber tiefer ging es nicht in die Materie. Auch wenn für einige die MFC schon todgeglaubt wird, gibt es noch genug Plätze in der Wirtschaft die gerade noch Leutz suchen die mit der MFC umzugehen wissen. Da sich jeder im ständigen Lernprozess befindet ist es bestimmt nicht verkehrt sich auch in alternativen mal umzusehen, aber alles kann ja keiner machen. Jeder sollte halt seine Favoriten rauspicken und loslegen. ^^ Den Rest bringt die Zeit mit sich. 🙂



  • Sorry, aber es ist die falsche herangehensweise, wenn du als Ziel hast, _Anwendungen_ zu entwickeln. Das was du hier her für dich als Ziel setzt, ist Windows-Programmierung, und nicht Anwendungs-Programmierung. Du mußt für dich entscheiden was du willst.

    Wenn du Windows-Programmierung (WinAPI) machen willst, wirst du _nur_ wissen wie Windows funktioniert. Du wirst aber dadurch z.B. nicht für Linux, Unix oder MacOS programmieren können.

    Wenn du Anwendungs-Programmierung (MFC, FLTK usw.) machen willst, weißt du zwar nicht wie Windows ein Fenster registriert, aber du wirst für alle möglichen Systeme programmieren können.

    Der Sinn einer C++ Library und auch von Java, .NET usw. ist es, den Programmierer vom System zu entkoppeln. Wenn er z.B. ein Grafik-Programm entwickeln will, warum muß er da wissen wie Windows ein Fenster registriert? Es wird ihm im Leben keinen Vorteil bringen.

    Wenn du std::cout benutzt, weißt du ja auch nicht wie letztendlich dein String auf den Bildschirm kommt. Mußt du auch nicht.

    Ich sage nicht, das man sich damit nicht beschäftigen soll, mit dem was man sich beschäftigen will. Wenn du also wissen willst, wie die WinAPI funktioniert, dann lerne es! Aber der Sinn für Anwendungsprogrammierung erschliesst sich mir letztendlich nicht. Aber ist wie gesagt von jedem selbst die Entscheidung. Will da nur nochmal drauf hinweisen.



  • mhh. es interessiert mich nicht nur windows.
    kann sein dass ich da falsch liege, aber vom grundzätzlichen
    prinzip, werden die alle gleich arbeiten.

    ms_windows war nun auch nich DIE neue erfindung,
    apple hatte schon sowas wie windows,da hat man noch an ms-dos
    gesessen.

    linux und seine fenster oberfläche glaub kde, gnome etc,
    wird vom grundprinzip her auch nicht anders arbeiten.

    und denke mit diesem wissen kann man rückschlüsse ziehn, wie
    zb der java interpreter arbeitet.

    gut, mein problem ist sichherlich ,dass mich alles ganz genau interessiert.
    vielleicht versaut einen da analog/digitaltechnik, asm etc, ein wenig.

    nun ist es bei mir leider auch so...

    kennt ihr eve und der letzte gentleman, wo der in diesem
    bunker aufwächst und nach 30jahren das erstmal die welt erblickt?

    letze mal intensiv hatte ich mich so 1989 mit programmieren beschäftigt,
    basic, turbo pascal, assembler.(da war ich 9jahre)

    edit: die hässliche pubertät kam ja auch noch (sex,durgs and rock'n'roll)

    finde programmieren macht jetzt mehr spass, als
    damals. schon durch das internet und der niedrigen kosten.

    und für 1.69dm kosten pro einwahl, fand ich besseres als mich
    mich mit programmieren zu beschäftigen, was man halt so macht
    wenn man seinen ersten inet schluss hat:)

    hab danach nicht mehr sehr viel gemacht, hab dann html gemacht,
    dann dazu einige scriptsprachen php und son kram, auch mal nen server
    eingerichtet.

    dann viel graphic, 2d und 3d. hab das interesse am programmieren aber nie so
    verloren, tjo und nun ist alles soo anders:)

    es fällt mir schwer sachen einfach so hinzunehmen, und sachen anzuwenden
    wenn ich nicht weiss was da so passiert.

    ich denke mal das muss ich abstellen, da ich sonst wohl nicht weiterkommen
    werde.

    ziel..welches ziel hab ich, nun ja..will in 3jahren informatik und
    elektrotechnik studieren, will hardware bauen und diese auch programmieren
    können. ich will diese hardware aber auch an den pc anschliesssen können
    und mir sachen visualisieren lassen in einer graphischen oberfläche, windows
    und linux würde mir reichen, macOS interessiert mich nicht so wirklich.

    MacOS ist vielleicht nicht schlecht aber werde das traumatische
    erlebnis, anfang der 90er nicht vergessen wo ich an einem apple
    saß mit einer "ein tasten maus", hehe.

    ich werd das mit gui erstmal sein lassen und weiter c++ mit consolen
    anwendungen lernen und meine asm kenntnisse auffrischen und erweitern.
    (inline asm und ms vc++, vertragen sich irgendwie nicht:))



  • aja kleines heimliches laster was ich noch habe ist interesse
    für spieleprogrammierung, obwohl mich da mehr die engine entwicklung reizt,
    und dass die dinger dann auch unter windows und linux laufen,

    ich weiss ist alles ein bischen viel, hoffe aber das ich noch ein
    wenig leben werde um das alles zu lernen:)


Anmelden zum Antworten