WinAPI für MFC erforderlich?



  • Tach auch!

    Als ich mit dem Programmieren von C++ begann, habe ich mich gleich in die MFC gestürzt, welches am anfang auch ein bisschen schwierig war und irgendwie immernoch schwierig ist, weshalb ich mich entschieden habe, den C++ (nicht den MFC) kurs von mut.de zu machen, um die Grundlagen von C++ zu lernen.
    Ich habe festgestellt, das die MFC auch große ähnlichkeit mit WinAPI hat. Sollte ich, wenn ich den C++ Kurs abolviert habe, einen WinAPI und erst dann einen MFC kurs machen?

    Mein ziel ist es, ziemlich vertraut mit den meisten Grundlagen von C++ zu sein und dann recht Produktive MFC anwendungen zu entwickeln.

    Danke im Voraus



  • Die MFC sind gekapseltes WinAPI
    Nur ne darübergelegte Klassen-Bibliothek die die Entwicklung beschleunigen soll



  • Ich habs folgendermaßen gemacht:
    C++ in 21 Tagen und VC++ in 21 Tagen (beide von mut) parallel gelesen. in VC++ in 21 Tagen bekommt man manchmal ja auch WinAPI-Funktionen vorgesetzt, wenns kein MFC-Äquivalent dafür gibt, so hab ich die ersten WinAPI-Befehle gelernt. Dann hab ich irgendwann später das Tut von www.winapi.de gemacht um ein wenig die grundlagen zu verstehen.



  • Ok, dann werde ich das wohl auch so machen, aber eine frage habe ich noch:
    Könnte es schaden, wenn ich so einen WinAPI kurs mache, da man ja nicht C vor C++ lernen soll, da es dort unterschiede gibt?

    Danke im Voraus



  • Assembler -> C -> C++ -> C#
                   -> WinAPI -> MFC
    


  • was issn C#???



  • Ich verstehe nicht, warum man nicht C vor C++ lernen soll. Je mehr man kann, desto besser verdichten sich die Dinge. Am Besten schaut man sich bei der Windows-Programmierung ein kleines Programm in Assembler an. Da sieht man dann wirklich, was an der Basis abläuft. Hier ein kleines Beispiel von MS:

    ; #########################################################################
    
          .386
          .model flat, stdcall
          option casemap :none   ; case sensitive
    
    ; #########################################################################
    
          include \masm32\include\windows.inc
          include \masm32\include\user32.inc
          include \masm32\include\kernel32.inc
          includelib \masm32\lib\user32.lib
          includelib \masm32\lib\kernel32.lib
    
    ; #########################################################################
    
        .code
    
    start:
    
        jmp @F
          szDlgTitle    db "Minimum MASM",0
          szMsg         db "  --- Assembler Pure and Simple ---  ",0
        @@:
    
        push MB_OK
        push offset szDlgTitle
        push offset szMsg
        push 0
        call MessageBox
    
        push 0
        call ExitProcess
    
    end start
    

    Solche Dinge können nie schaden. 😉
    Da sieht man z.B. in welcher Reihenfolge die Aktualparameter per push-Befehl auf den Stack geschoben werden müssen (nämlich von hinten nach vorne), damit die nachfolgende WinAPI-Fkt. (hier MessageBox) richtig "poppen" kann. Return-Werte landen dann übrigens im Akkumulator EAX.

    Genau so wichtig ist es, die C-Funktion printf(...) und ihre Formate zu kennen, das kommt immer wieder in MFC-Programmen. Spätestens, wenn man in den Sourcecode der MFC schaut, braucht man Basis-Wissen.

    [ Dieser Beitrag wurde am 08.06.2003 um 19:23 Uhr von Erhard Henkes editiert. ]



  • Da gibt es inzwischen sogar ein dickes Buch von Charles Petzold über C# (C sharp = cis = erhöhtes C). Schau mal in die Sektion C# des Forums.

    Ich bringe deshalb nur drei Beispiele:

    //Beispiel 1 :
    
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class HalloWelt
    {
      public static void Main()
      {
        MessageBox.Show(
            "Hallo","Info",MessageBoxButtons.OK, MessageBoxIcon.Information);
      }
    }
    
    //Beispiel 2 :
    
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class Fenster
    {
      public static void Main()
      {
        Form MeinFenster = new Form();
    
        MeinFenster.Width = 300;
        MeinFenster.Height = 50;
        MeinFenster.Text = "Ich bin ein Fenster";
    
        Application.Run(MeinFenster);
      }
    }
    
    //Beispiel 3 :
    
    using System.Runtime.InteropServices;
    
    class PInvokeTest 
    {
      [DllImport("user32.dll")]
      static extern int MessageBoxA(int hWnd, string m, string c, int t); 
      static void Main() 
      {
          MessageBoxA(0, "WinAPI lebt noch!", 
                      "Gruß aus der user32.dll", 0);
      }
    }
    

    [ Dieser Beitrag wurde am 08.06.2003 um 19:34 Uhr von Erhard Henkes editiert. ]


Anmelden zum Antworten