C++-Anfänger mit MFC



  • Hallo allerseits,

    seid erstmal gegrüßt. Ich wollte mir mal die Zeit nehmen, und etwas, was ich für mich unter der Windows cmd realisiert habe, etwas hübscher und technisch sauberer mit c++ unter Visual Studio 2008 zu machen. Früher habe ich ein bißchen was in Delphi geschrieben, c++-Grundkonstrukte kenne ich auch noch, alles weitere ist Arbeit, Arbeit, Arbeit. OOP ist mir immer suspekt geblieben, aber ich will es nochmal damit versuchen.

    Ich habe mal ein paar Punkte aufgeschrieben, vielleicht könnt Ihr mir als Einsteiger ein paar Tipps oder Tutorials nennen, weil ich mittlerweile den Wald vor lauter Bäumen nicht mehr sehe... Ich fand damals bei Delphi6 war die Schwelle zur Windows-Programmierung geringer...

    Winapi ist für mich eine große Hürde, das heißt ich will mich im Detail später damit befassen, falls das geht.

    Es soll für den Anfang eine kleine dialogbasierte Applikation werden, die ein paar Textfelder für die Eingabe hat, ein paar Checkboxen, und auf der Eingabe herumzaubert, und immer in Echtzeit eine Ausgabe in einem schreibgeschützten Textfeld anzeigt.
    -> Zugriff auf GUI-Elemente, wie läuft das grundsätzlich? Ist ein Textfeld eine Klasse, und man greift auf Methoden zu?

    Übrigens möchte ich in einer Variable eine Bitrepräsentation eines HEX-Strings haben und damit neu interpretieren... Das heißt bspw, aus "AB1E" würden dann 16 Bits, von denen ich dann zum Beispiel 3-Bit-Blöcke entnehme (eins bleibt hinten übrig) und die jeweils 3 Bits dann eben z.B. aus einem ASCII-Bereich neu interpretiere.
    -> Will ich mich mit Bitfeldern befassen?

    Was ich dann noch will, ist fremden Code benutzen, und zwar brauche ich eine Einwegfunktion vom Schlage SHA oder so... cryptopp.com habe ich da gefunden. Wie macht man das grundsätzlich? Ich denke mal Quellcode dem Projekt hinzufügen (also in der VisualStudio-GUI) und dann einfach auf die Klassen zugreifen?

    Danke
    Michael



  • http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel1.htm

    diese Seite find ich persönlich sehr gut für Einsteiger in MFC! 🙂



  • Das hast du dir ja viel vorgenommen. Ganz ohne API wirste allerdings an der ein oder anderen Stelle nicht auskommen, denn die MFC kapselt ja die WinAPI bzw. kann man manche Dinge eben nur mit Hilfe der API umsetzen.
    Als tut kann ich noch http://www.cpp-tutor.de empfehlen. Allerdings wird sich unter 2008 das ein oder andere Detail geändert haben, denn die beiden Empfehlungen (also meine und die des Vorposters) basieren teilweise noch auf der VErsion 6.0.



  • Hi,

    danke schonmal. Ich hoffe, ich habe mir nicht zuviel vorgenommen...

    Bzgl. http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel1.htm

    Da wird ein Klassenassistent gezeigt. Ist der in VS2008 auch noch so vorhanden (ich kann das jetzt nicht nachsehen)? Habe einen solchen da nie gesehen...

    Ich habe mir ja noch mehr vorgenommen. Meine Ideen zu dem Programm verlangen ein paar Farbboxen, die sich im Farbton unterscheiden. Ich will dann wohl auch noch GDI nachlesen und ein HSL-Modell da finden 😃

    Michael



  • Nee den gibts seit dem 2003er Studio (?) nicht mehr.
    Stattdessen gibts einige Assistenten (teilweise ziemlich versteckt), die ClassView usw.



  • Squeller schrieb:

    Hi,

    danke schonmal. Ich hoffe, ich habe mir nicht zuviel vorgenommen...

    Bzgl. http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel1.htm

    Da wird ein Klassenassistent gezeigt. Ist der in VS2008 auch noch so vorhanden (ich kann das jetzt nicht nachsehen)? Habe einen solchen da nie gesehen...

    Deshalb gabs von mir die Bemerkung mit der 6er Version. Du hast aber hoffentlich schon nicht nur die Express-Version vom 2008er...



  • Nein, Visual Studio 2008 Pro.



  • Oha, das kann ja was geben. Die Lernkurve in Delphi war doch anders, hier blicke ich nicht urch. Ich wollte klein anfangen: Ich habe zwei Edit-Controls angelegt. Ich habe es nun jedoch in einer Stunde nicht geschafft, zwei Edit-Controls anzulegen, wobei man in das eine eine Eingabe macht und im anderen Control wird, während man tippt, der eingetippte Text ausgegeben.

    --> void CMyFirstCPPAppDlg::OnEnChangeEdit1()

    EDIT. Irgendwann habe ich SetDlgItemText gefunden.

    SetDlgItemText(IDC_EDIT2, T("testtext"));
    

    So bekomme ich schon mal Text in Edit2. Warum eigentlich _T? Ist unicode Pflicht?

    Nun würde ich gerne statt "testtext" den Inhalt von EDIT1 ausgeben. Wie? Au weia, ich verheddere mich total zwischen diesen vielen Projektdateien, MSDN-Hilfe, Google-Hits usw... Es ist schrecklich.



  • Das Gegenstück zu SetDlgItemText ist GetDlgItemText. Damit kannst du aus dem ersten Control den Text auslesen (du musst ihn zwischenspeichern) und ihn im zweiten Control setzen.

    Unicode ist nicht Pflicht und kann in den Projekteinstellungen abgeschaltet werden (stell dann auf MBCS), dann kannst du auch auf das _T-Makro verzichten. Ob du Unicode verwenden willst, ist dir selbst überlassen.



  • _matze schrieb:

    Das Gegenstück zu SetDlgItemText ist GetDlgItemText. Damit kannst du aus dem ersten Control den Text auslesen (du musst ihn zwischenspeichern) und ihn im zweiten Control setzen.

    Ich muss mich glaube ich erstmal zum intensiveren Studium zurückziehen. Der Umgang bei cpp mit Strings scheint auch für mich ungewohnt gelöst zu sein. Array of chars?

    Was will GetDlgItemText eigentlich als 2. Argument?
    GetDlgItemTextW(IDC_EDIT1, ?);
    Auch IDC_EDIT1? Ich habe hier ein autom. angelegtes Edit-Control. Wie heißt da das handle, wie der Identifyer?



  • Das 2. Argument ist ein Zeiger auf ein char-Array, dass du vorher anlegen musst (und das genügend Speicher bereitstellen muss). Zum Beispiel so:

    wchar_t temp[512];  //besser zuviel als zu wenig Speicher reservieren
    GetDlgItemTextW(IDC_EDIT1,temp,512);
    

    Meine Empfehlung wäre, die Windows-Programmierung erstmal hinten anzustellen und lieber die C++-Basics in Form von Konsolenanwendungen zu lernen. Du wirst hier viel zu sehr mit MFC-Gedöns konfrontiert, das nur von der eigentlichen Basis der Sprache ablenkt. Wenn du in der Konsole halbwegs sicher bist, kannst du immer noch auf WinAPI oder MFC wechseln und kommst dann sicher deutlich besser zurecht. 🙂



  • _matze schrieb:

    Meine Empfehlung wäre, die Windows-Programmierung erstmal hinten anzustellen und lieber die C++-Basics in Form von Konsolenanwendungen zu lernen. Du wirst hier viel zu sehr mit MFC-Gedöns konfrontiert, das nur von der eigentlichen Basis der Sprache ablenkt. Wenn du in der Konsole halbwegs sicher bist, kannst du immer noch auf WinAPI oder MFC wechseln und kommst dann sicher deutlich besser zurecht. 🙂

    Danke, Du hast vermutlich Recht. Ich werde das, was ich vorhabe, mal als Konsolenanwendung schreiben und wenn ich das geschafft habe es zu einer GUI-Anwendung machen.
    Ich komme jetzt vermutlich öfter 😃 Was die Sprache angeht, habe ich auch noch ein Buch "C/C++. Die Referenz von Dirk Louis" - Zwar gibts vieles im WWW, aber da verzettel ich mich immer zu leicht.



  • R3dNeXX schrieb:

    Nee den gibts seit dem 2003er Studio (?) nicht mehr.
    Stattdessen gibts einige Assistenten (teilweise ziemlich versteckt), die ClassView usw.

    mit meinem msvc2005 kann ich immer noch mfc-basierte anwendungsgerüste erstellen, allerdings ist die bedienung ganz anders als beim vc6.
    zum anfangen: ich finde, GUI-programme sind für anfänger viel interessanter als konsolenzeugs. z.b. meine ersten gehversuche unter win waren gleich windows-programme, hat echt spass gemacht. davor konnte ich nur BASIC und assembler. hätte ich auf der konsole angefangen, hätte ich bestimmt schnell die lust verloren bzw. ich fands sehr reizvoll, 'echte' windowsprogramme zu bauen, mit buttons, editfeldern, dialogboxen, bitmaps usw. (aber das ist bei jedem wohl verschieden).
    🙂



  • ;fricky schrieb:

    zum anfangen: ich finde, GUI-programme sind für anfänger viel interessanter als konsolenzeugs.

    Interessanter auf jeden Fall, aber leichter wohl eher nicht. Ich habe auch direkt mit Windows-Programmen anfangen müssen (hatte ne neue Arbeitsstelle, konnte aber noch kein C, musste aber produktiv sein 😉 ). Trotzdem bin ich der Meinung, dass man die Basics auf der Konsole besser lernen kann, weil man da nunmal diesen riesigen 'WinAPI-Overhead' nicht noch mit lernen muss. Man kann ruhig mal ein paar Wochen in Konsolenanwendungen investieren, bevor man sich vom PSDK erschlagen lässt. 😉 Dann fällt der Einstieg dort auch sicher leichter und man hat von vorneherein mehr Ahnung von dem, was man da macht.


Log in to reply