Meinung zu Projekt gefragt, und MFC oder WinAPI direkt? Danke



  • Hallo Forenbesucher,

    In diesem Forum (http://www.c-plusplus.net/forum/viewtopic-var-t-is-179982.html) wurde mir geraten, dass ich für ein Projekt, besser C++ anstatt C# .NET nehme.

    Ich muss eine Support-CD (Linux/Windows) erstellen. Hier ist nur der Windows Teil entscheidend, und wie der Linuxteil gelöst wird ist relativ klar. Im Windows Teil muss ich unter anderem auch GUIS etc programmieren.

    a) Soll ich die GUI via WinAPI von Grund auf erstellen, oder soll ich
    b) das via MFC lösen?

    Lohnt sich der Aufwand die MFC zu lernen, gibt es die in Vista auch? Ich möchte nur nicht Zeit für etwas investieren, wo ich weiss, dass ich das Wissen später nicht mehr brauchen kann.

    Ich kenne die WinAPI einwenig, programmierte auch schon ca. 2 Jahre in der Sprache C.

    C++ habe ich vor einem Jahr kurz gelernt (d.h. grobes Wissen ist vorhanden, müsste mich detailiert nochmals mit den Klassen, Templates, Vektoren etc. auseinandersetzen). Ist es realistisch das in C++ zu programmieren? Das "Das" ist folgendes:

    - Überprüfen und ...
    - ändern der Windows Einstellungen, ggf. ändern

    Die CD soll unter Windows 2000 und höher funktionieren (ohne dass der Kunde etwas installieren muss). Das war der Grund für die C++-Wahl.

    So, ich hoffe ich habe alles wichtige angegeben, damit ihr mir Tipps geben könnt. Falls ihr gerne noch etwas benötigt, dann schreibt das bitte. Wenn ich das falsche Forum genommen habe, dann steinigt mich bitte nicht 😉

    Vielen Dank für eure Meinungen, Hilfen und Antworten,

    Grüsse, CyberDot

    PS: Zuerst wählte ich VB6, denke aber, dass ich bei dieser Wahl nicht viel lernen kann.



  • also...
    reines windows API würde ich nicht empfehlen. Ich hab das auch mal gemacht damti was größeres zu schreiben, aber ich hab einfach keinen ordentlichen stil hinbekommen. Alles ineinander verwurschtelt. Es ist schwer mit der WinAPI einen guten Stil zu coden. die MFC ürd ich auch nich nehmen, sind veraltet und kosten (zum entwickeln) geld. Wenn du sie allerdings hast, kannst du damit auch eine einfache GUI in ein paar sekunden zusammenklicken und auch schnell funktionne hinzufügen, dank der integration in visual studio.

    Meine Empfehlung: ein anderes Framework. Auf http://kharchi.de/cpp_gui/index.html findest du eine gute übersicht vom lieben Artchi (grüße 🙂 ).
    Smartwin++ wäre eine möglichkeit, hat besseren Stil als winapi uind ist windows only. Du kannst aber auch eine multi-plattform-bibliothek nehmen, wie fltk2 oder wxwidgets. fltk2 ist sehr einfach zu lernen, bietet aber auch nich viel, aber für eine gute GUI vollkommen ausrecihend. WxWidgets bietet viel mehr funktionalitäten, aber auch komplizierter zu lernen und bläht programme ziemlich auf.

    Also ich würde dir empfehlen ein anderes framework als die MFC oder WinAPI zu nehmen, die WinAPI kannst du für systemspezifische Sachen trotzdem noch benutzen. FLTK ist gerade für sowas ausgelegt, dass man noch leicht auf die systemfunktionen zugreifen kann.

    Noch was:
    Wenn ihr eine hilfecd erstellen wollt, die den computer checkt ob programm installiert sind, warum schreibt ihr dann nciht die gui für linux und windows auf einmal mit was cross-plattform-mäßigen? Die Systemanalyse kann man dann in eine dll oder .so auslagern und damit dan die infos bekommen?
    Wäre effizienter



  • CyberDot schrieb:

    Hallo Forenbesucher,
    [...]
    a) Soll ich die GUI via WinAPI von Grund auf erstellen, oder soll ich
    b) das via MFC lösen?
    [...]
    Ich kenne die WinAPI einwenig, programmierte auch schon ca. 2 Jahre in der Sprache C.

    Die MFC ist zwar vielleicht einfacher zu benutzen der oft vom Wizard erezugte Code ist evtl. schwer zu lesen wenn man mit C++ anfängt.

    Meine Erfahrungen mit der MFC sind trotz meines Faibles für Objektorientierung nicht die besten; ich setze sie nicht mehr ein.

    CyberDot schrieb:

    C++ habe ich vor einem Jahr kurz gelernt (d.h. grobes Wissen ist vorhanden, müsste mich detailiert nochmals mit den Klassen, Templates, Vektoren etc. auseinandersetzen).

    Ist es realistisch das in C++ zu programmieren? Das "Das" ist folgendes:
    - Überprüfen und ...
    - ändern der Windows Einstellungen, ggf. ändern

    Die Win32 API Aufrufe sind eh reines C.
    Die Kapselung dessen in Klassen dürfte recht "flach" ausfallen können; deshalb denke ich nicht dass die Verwendung von C++ sehr kritisch wird.

    Ich würde die Anwendung mit C++ und Win32 API bauen und dabei aufpassen dass ich nicht mit meiner Klassenhierarchie die MFC nachbaue - ergo das GUI grösstenteils prozedural belassen aber die Daten dahinter in Klassen packen.

    Das ist aber kein kategorischer Imperativ sondern reiner Pragmatismus.

    CyberDot schrieb:

    Die CD soll unter Windows 2000 und höher funktionieren (ohne dass der Kunde etwas installieren muss). Das war der Grund für die C++-Wahl.

    ???
    Für die Wahl "statt C#" oder für die Wahl "statt C" ?

    Mach doch vielleiht ein Kurztutorial "Scribble" zur MFC

    http://msdn2.microsoft.com/en-us/library/f35t8fts(VS.80).aspx

    und schau wie Du damit klarkommst.

    Egal wofür Du Dich entscheidest das Muster

    Model/View/Controller

    das bei Scribble ( und bei der MFC ) zugrundeliegt kannst Du immer gebrauchen;
    selbst wenn Du's mit C und Win32 API implementierst.

    Grüsse und viel Erfolg

    *this



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • Hm.
    Ginge es evtl. mit einer "start.exe" die das "Produkte erkennen" übernimmt und dann einfach ne Flash Applikation rausstartet?
    Oder vielleicht ne VB6 Applikation. Irgendwas was man mehr oder weniger einfach zusammenklicken kann halt...



  • Wenn man mit WinAPI anfäng braucht es schon ne Weile is man was vernünftiges zusammen bekommt.



  • Soweit ich das verstanden habe, musst Du nur wenige Aufgaben erledigen und benötigst keine umfangreiche Kommunikation mit dem Benutzer. Daher empfehle ich Dir C/C++/WinAPI für diese Aufgabe, da Du damit volle Transparenz hast.

    http://www.henkessoft.de/C++/WinAPI/WinAPI Kapitel 1 bis 6/api1.htm



  • Vielen Dank für die vielen Ratschläge und die guten Links. Also, ich bin nicht im Besitz von visual studio oder so. (nur express c#, das man gratis benutzen kann). Ich programmier mit der IDE Dev-C++ und bin soweit auch zufrieden. Ich habe das Buch von Charles Petzold gekauft, namens "Windows Programming, Fifth Version". Traurigerweise wird hier nicht erklärt, wie ich mit c/c++ eine Textbox erstelle, und da Texteinfügen bzw. bearbeiten kann. Ich bin enttäuscht von diesem Buch, da es nicht bietet was ich eigentlich gerne gehabt hätte. Ich möchte nämlich (einfache) Dialoge kreiern mit ein paar Buttons, Grafiken, etc. Dafür sollte es aber sowas wie LoadBitmap oder so geben.

    Kann mir wer ein Buch empfehlen, dass mir das beibringt? Wunschsprache wäre C, kann aber auch C++ sein. Danke

    bye bye.



  • CyberDot schrieb:

    Ich habe das Buch von Charles Petzold gekauft, namens "Windows Programming, Fifth Version". Traurigerweise wird hier nicht erklärt, wie ich mit c/c++ eine Textbox erstelle, und da Texteinfügen bzw. bearbeiten kann. Ich bin enttäuscht von diesem Buch, da es nicht bietet was ich eigentlich gerne gehabt hätte. Ich möchte nämlich (einfache) Dialoge kreiern mit ein paar Buttons, Grafiken, etc. Dafür sollte es aber sowas wie LoadBitmap oder so geben.

    Sei nicht böse, aber lies besser noch mal nach. Soweit ich mich erinnern kann, wird Textbox gleich am Beginn behandelt, Buttons ebenfalls.



  • Hallo Christoph,

    Danke für den Hinweis. Zu meinem Glück habe ich etwas gefunde, aber es wurde erst später behandelt. Möglicherweise liegt es an den Buchversionen? ich besitze die 5. Version. Es sind auch "Killerbeispiele" und sehr schwer nachvollziehbar WIESO es funktioniert. Wenn jemand ein Buch hat, das mich in das Thema einführt, wäre ich sehr dankbar.

    Vielen Dank.

    CyberDot



  • Ich erachte den Petzold als sehr gutes Buch darum habe ich mir mal die Mühe gemacht:
    alle Angaben beziehen sich auf die 5. Auflage:

    S. 466 ff: Dialoge (mit 2 sehr einfachen Beispielen)
    S 377 ff: Editfenster (um deine Kritik zu widerlegen: Text einfügen und bearbeiten wird dort (S. 381) vollständig erklärt!)
    S. 339f: sehr ausführliches Kapitel über Buttons

    und Teil III des Buches heißt sogar: Noch mehr Grafik!

    Und gerade das WIESO wird sehr gut behandelt, für noch detaillierte Informationen musst du sowieso die msdn verwenden.



  • Die Leute werden immer bequemer. Daher hat C++ auf Dauer keine guten Chancen im GUI-Bereich, wenn keine einfache, standardisierte und plattformübergreifende GUI dazu kommt.



  • Hallo

    Soll das im neuen Standard eventuell angeboten werden?

    chrische



  • Es wird im C++-Standard keine GUI geben! Warum wird von gestandenen C++lern immer wieder dieses Thema vorgekramt, wenn man die Antwort schon kennt? Wer GUI machen will, kann sich eine der zahllosen GUIs auf dem Markt bedienen. Sind auch viele kostenlose und gute dabei.

    Und wer meint, eine GUI-Editor (wie der Qt-Builder, wxFormbuilder u.a.) sei zu schwierig zu bedienen, sollte das Programmieren sein lassen. 😃

    Wer generell was gegen GUI & C++ in Kombination hat, soll halt Java oder C# machen. Wir leben in einer freien Programmierwelt.



  • Hallo

    Ich kannte die Antwort noch nicht und weiß auch nicht, warum die bereits vorhandenen GUI ein Grund dafür sein sollen keine neue im Standard aufzunehmen.

    chrische



  • Es ist ein offizielles Statement des C++ Komitees, das es keine GUI geben wird. Warum? Weil es nur ein Kompromiss wäre. Wie soll man die UI-Konzepte von MacOS, Windows, Gnome u.a. GUI-Systemen in einen C++-Standard unterbringen? Das wird nie im leben funktionieren. Es wäre nur ein Kompromiss möglich. Und dann? Dann würde ihn niemand benutzen, weil Feature A und Feature F fehlt. Und dann wäre man wieder nicht platformneutral. Das sieht man sehr gut and Swing: obwohl es in der Basis-Runtime dabei ist, gibt es andere GUI-Libs (z.B. SWT), weil Swing auch nur ein Kompromiss für viele ist.

    Weiterhin: welche andere ISO-normierte Sprache hat denn eine GUI? Ich kenne keine. Java ist nicht normiert. WindowsForms und WPF auch nicht. Das sind alles Hersteller-GUIs, die sie nicht rausrücken. Auch Swing ist nicht frei, es ist Copyrighted by SUN. Alle wollen im C++-Standard (werdet euch über diesen Begriff bewusst!) eine GUI, weil andere Sprachen auch eine GUI haben. Aber die anderen sind nur Sprachen, die einem Hersteller gehören und nicht einem ISO-Standard unterliegen. C# unterliegt mittlerweile ISO, hat aber auch keine GUI, genausowenig wie CLI.

    Wisst ihr wann der Vergleich nicht mehr hinkt? Wenn SUN ihr Java unter ISO normiert und Swing dazu mit in den Standard packt. Das werden wir aber wohl nicht mehr erleben.

    Genau das gleiche bei C#: erst wenn im ISO-C#- oder ISO-CLI-Standard die WindowsForms oder Gtk# oder andere GUI-Lib dabei ist, könnt ihr im ISO-C++-Standard eine GUI fordern und Vergleiche anstellen!

    Die C++-Welt hat aber eine GUI, sogar mehrere GUIs: sowohl gewerbliche (Qt) als auch kostenlose (gtkmm u.a.). Nimmt doch einfach Qt oder gtkmm oder smarwin++ oder...

    C++, Java und C#: GUIs vorhanden.
    C++ Standard, C# Standard, CLI Standard: keine GUI vorhanden.



  • Achja, hinzukommen würde, das die Stdlib- und Compiler-Hersteller auch die GUI-lib implementieren müssten. Wir wissen alle, das es auch mit Kosten verbunden ist. OpenWatcom hat immer noch keine komplette Stdlib. STLport wird nicht weiter gepflegt. Apache ist immer noch dabei ihre von Rogue Wave gesponserte Stdlib zu fertig zu implementieren. Die GCC-Jungs scheinen ihre Stdlib fertig zu haben. Dinkumware hat diese fertig und sogar noch mehr implementiert. Aber schon alleine die Special Math Lib wurde aus KOSTENGRÜNDEN von der LWG (Library Working Group des C++ Komitees) aus dem TR1 gestrichen. Haben wir das export-Schlüsselwort in allen Compilern? nein! Implementierungskosten sind zu hoch. Erst einer (Cameou) hat es bisher implementiert und würde sowas nie wieder tun.

    Jetzt stellt euch mal eine GUI-Lib im C++ Standard vor. Könnte man glaub ich auf Implementierung lange warten.

    Jetzt wisst ihr, warum es auch keine GUI-Lib im Standard geben würde. 1. wegen der Kompromisse für die Features und 2. wegen der Implementierungskosten. Dann lasst lieber Trolltech, gtkmm u.a. ihr Ding durchziehen und profitiert selbst davon, in dem ihr euch das passende raussucht. Wir können froh sein, das wir mittlerweile Regex u.ä. im Standard haben. Das ist viel essenzieller in der Informatik und EDV als eine austauschbare GUI.



  • Ein paar Grundsatzfragen von mir, die mich interessieren: Ist die stdlib von C++ eine ISO-Norm? Wieso gibt es verschiedene Implementierungen der stdlib, ich sehe da irgendwie keinen Sinn dahinter?
    Java als Sprache und die Bibliotheken sind doch jetzt unter einer freien Lizens, was würde eine ISO-Normierung für Vorteile bringen?



  • Ja, die Stdlib ist ein Bestandteil der ISO-Norm.

    Die Frage mit den verschiedenen Implementierungen verstehe nicht ganz. Warum gibt es von Java verschiedene Implementierung? (z.B. von IBM u.a.) Könnte ich auch fragen, warum wir hier in der Firma IBM- und SUN-Runtimes laufen haben, und diese auch noch binär inkompatibel bei RMI sind. 🙄 Aber das ist jetzt nur eine rethorische Gegenfrage von mir um dich dafür zu sensiblisieren. 😉

    Java ist noch nicht unter einer freien Lizenz. Bisher ist meines Wissens nur der Java Compiler unter unter GPL gestellt. Alles andere ist noch Copyright by SUN. Der Source der SUN Java Runtime Library ist zwar einsehbar, aber nicht unter einer freien Lizenz. Und kostenlos ist auch noch lange nicht frei.

    Welchen Vorteil eine ISO-normierung hätte? IBM u.a. müssten für ein Java-Compatible-Siegel keine Lizenzgebühren mehr an SUN entrichten. Und sicherlich wäre noch viele weitere Lizenz-Fragen und Patent-Fragen autom. gelöst. Schon alleine das Java-Logo und Java-Name ist Trademark by SUN. Bei C++ und C# sieht die Sache anders aus: jeder kann und darf diese Begriffe benutzen und darf kostenlos diese Sprachen und ihre Compiler und Libraries implementieren. Für C++ mussten z.B. Bjarne Stroustrup und AT&T ihre Rechte aufgeben und entsprechende Papiere bei der ISO unterschreiben, die das belegen. AT&T und Bjarne können heute niemanden mehr wegen C++ verklagen oder Geld verlangen. Auch die STL mußte von Hewlett Packard damals abgetreten werden. Dazu ist nicht jeder ebend mal bereit.

    Hier mal der historische Verlauf einer von SUN nicht gewollten normierung:
    http://www.heise.de/newsticker/meldung/1592
    http://www.heise.de/newsticker/meldung/4653
    http://www.heise.de/newsticker/meldung/4717
    http://www.heise.de/newsticker/meldung/5273
    http://www.heise.de/newsticker/meldung/7200



  • chrische5 schrieb:

    Ich kannte die Antwort noch nicht und weiß auch nicht, warum die bereits vorhandenen GUI ein Grund dafür sein sollen keine neue im Standard aufzunehmen.

    Um nochmal speziell auf diese Frage einzugehen. Du mußt davon ausgehen, das das Komitee nur eine Abstimmungsgruppe ist. (die Realität sieht natürlich so aus, das die Komitee-Mitglieder mehr machen als nur "Abstimmen", sondern auch aktiv beisteuern 😃 ) Wenn du sagst "Warum bringt man nicht gtkmm oder Qt in den Standard?", dann mußt du dich da an die Inhaber wenden. Soll heißen, Trolltech und das gtkmm-Team (Gnome?) müssen erstmal bereit sein, ihre Rechte abzutreten, und zweitens ein Proposal schreiben und einreichen. Dann kann erst das Komitee aktiv werden. Sind aber diese Inhaber der GUI-Libraries überhaupt bereit?

    Also, gaaaaanz am Ende kommen soviele Faktoren zusammen, die auf eine GUI im Standard eher ein Nein vermuten. 😉


Anmelden zum Antworten