(MFC mit dem...) Anfangsschwierigkeiten mit Visual C++



  • Hi,

    programmieren ist eigentlich nichts neues für mich.
    Mit Basic und Profan komme ich gut klar und weis auch was ich mache.

    Seit einer Woche mache ich jetzt mit der inroductory version von VisualC++
    rum. Leider beherscht Microsoft es mal wieder perfekt die Online-Hilfe so zu gestallten das man hinterher weniger weis als vorher (ausser die direkthilfe zu fehlernummern, die is supi!).

    Hab mir schon tuturials runtergeladen, und in der Teorie ist mir das meiste schon klar.
    Nur: Wenn ich mit dem Assistenten ein Prog. erstelle vermisse ich die Main-Funktion.Und eigene Funktionen funktionieren auch nicht wirklich.
    Mittlerweile fühl ich mich als hätt ich voeher nie ein Programm geschrieben und kenn mich nich mer aus 😞

    Irgendwelche tips wie ich am besten starte um durchblick zu kriegen würden mir schon helfen.(z.b. Buchtips, Tuturial urls, vorgangsweise für ein grundgerüst oder so..)

    hoffe ich langweile niemenden mit diesen "blutigen anfänger fragen" aber langsam hab ich mer Frust als Lust.
    Binn für jede Hilfe Dankbar
    bis dann
    BackBONE



  • Geht es rein um C/C++ oder möchtest du WinAPI lernen?

    Bei 1. Kuck mal in die Bücher sektion dieser Page. Die Tutorials hier sind auch nicht zu verachten.
    Bei 2. Würde ich dir den Petzold empfehlen. Das ist das Standardbuch drüber.

    Wenn du C/C++ only programmieren möchtest - laß den Assistenten bleiben, und schreibe das alles selbst. Nur so lernt man was. Stell auf Konsolenprogramm und hab spaß 🙂



  • Hi

    Wende dich doch mal an die Leute in der WinApi bzw. VC++ rubrik.
    Letzteres ist besser.

    VC++ benutzt ein Framework welches die WinApi kapselt. Dies ist die sogenannte MFC (Microsoft Foundation Class). Die WinApi ist zu großen Teilen in C implementiert und die MFC in C++, aber dennoch läuft das bei der Windowsprogrammierung ein bischen anders mit dem Program ablauf. Es gibt da auch ne main-Funktion aber die is irgendwo im Code des Framework versteckt.
    Du bekommst nur Zugriff auf die Methoden der Klassen, die du dann wenn eine entsprechende Nachricht ankommt aufrufst,bzw. die aufgerufen werden.
    Lange Rede kurzer Sinn.
    Mach eine Konsolenanwendung. Da findest du dann auch eine main funktion. Das läuft alles ohne API oder MFC, wenn du es willst.
    Du kannst auch MFC-Unterstützung in einer Konsolenanwendung haben.
    Kann man alles einstellen.

    Also mit dem Assistenten eine Win32 Konsolenanwendung erstellen, und dir wird alles gleich viel bekannter vorkommen.
    😉



  • wie snorre schon sagte:
    Neu->Projekt->Konsole->Fertigstellen!
    Da kannst deine ganz normalen Dosprogramme schreiben!
    Wenn du eine StandardWin anwendung schreiben willst, brauchst du die int WINAPI WinMain(Hinstance x,hinstance y, LPCSTR str,int x)
    {
    return 0;
    }



  • @prolog - zumindest bei vc7 steht mit dem Konsolenassistent kein int main(...) oder so mehr da. Das Teil nennt sich dann _tmain( ... ). Naja - Microsoft typisch halt - hauptsache die Entwickler können das dann nur für unser System compilen 🙂
    Bei VC6 bin ich mir nicht mehr so sicher - ist schon ein paar Monate her - und den Assi verwende ich auch nicht



  • ich dachte bisher das die Konsolen anwendungen mit der Win-API nicht zusammenläuft. Hab drumm immer mit dem Assistenten eine Dialogbasierende
    Anwendung zusammenstellen lassen.
    Werd mich wol mal n bischen mit der Konsole spielen ... ohne Assistent.

    bis denn dann
    BackBONE



  • HI

    Ich hab mich wohl ein bischen missverständlich ausgedrückt.

    Ich meinte mit Assistent auch schon den Dialog in dem man entscheidet ob man ne Win32 ohne MFC, oder mit MFC, oder Lib oder eben Konsolenanwendung machen will.
    Habt aber recht, das kann man wohl nicht dazu zählen, der Eigentliche wird ja erst gestartet, so er denn gestartet wird, wenn man sich entschieden hat.



  • WinAPI, MFC siehe www.henkessoft.de

    Da gibts es auch einen kleinen Einstieg in Konsolen: http://www.henkessoft.de/cpp_konsole.htm

    Da findest Du z.B. so etwas:

    #include <iostream> 
    #include <cmath>  // notwendig fuer sqrt(...) 
    using namespace std; 
    int main() 
    { 
     cout << "Berechnung quadratischer Gleichungen vom Typ x*x + p*x + q = 0" <<"\n\n"; 
    
     double p, q, x1, x2; 
     cout << "Bitte p eingeben: "; 
     cin  >> p; 
     cout << "Bitte q eingeben: "; 
     cin  >> q; 
    
     x1 = -p/2 + sqrt(p*p/4.0 - q); 
     x2 = -p/2 - sqrt(p*p/4.0 - q); 
    
     cout << "\n" << "x1 = " << x1 << "\n" << "x2 = " << x2 <<"\n"; 
    
     return 0; 
    }
    

    [ Dieser Beitrag wurde am 28.06.2003 um 23:40 Uhr von Erhard Henkes editiert. ]



  • Original erstellt von SnorreDev:
    @prolog - zumindest bei vc7 steht mit dem Konsolenassistent kein int main(...) oder so mehr da. Das Teil nennt sich dann _tmain( ... ). Naja - Microsoft typisch halt - hauptsache die Entwickler können das dann nur für unser System compilen 🙂
    Bei VC6 bin ich mir nicht mehr so sicher - ist schon ein paar Monate her - und den Assi verwende ich auch nicht

    Man kann es aber zum Glück zu int main(int argc,char * argv[]) machen 🙂



  • Klar kann man das. Aber ich halte es für einen Schmarn, mit dem Assistenten was zu erstellen, wenn man von den 10 Zeilen eh wieder ändern muß. Die kann man auch zufuß eintippen.



  • Wenn ich mit dem Assistenten ein Prog. erstelle vermisse ich die Main-Funktion.Und eigene Funktionen funktionieren auch nicht wirklich.

    Schau Dir Kapitel 5 des MFC-Tutorials an:
    http://www.henkessoft.de/mfc_einsteigerbuch_kapitel5.htm

    Da findest Du MFC ohne Assistent. Vielleicht hilft Dir das weiter.

    #include <afxwin.h>  //Schritt 1 
    class CMyApplication : public CWinApp  //Schritt 2 
    { 
     public: 
     virtual BOOL InitInstance(); 
    }; 
    
    class CMyWindow : public CFrameWnd  //Schritt 3 
    { 
     public: 
     CMyWindow(); 
    };
    
    //-------------------------------------------------------------
    
    #include "EinfachesFenster.h"  //Schritt 4 
    CMyApplication MyApp;   //Schritt 5 
    
    CMyWindow::CMyWindow() //Schritt 6 
    { 
     Create ( NULL, _T("MFC-Anwendungsskelett") ); 
    } 
    
    BOOL CMyApplication::InitInstance() //Schritt 7 
    { 
     m_pMainWnd = new CMyWindow; 
     m_pMainWnd ->ShowWindow( m_nCmdShow ); 
     return TRUE; 
    }
    

    Schritt 1: Einbinden von <afxwin.h>
    Schritt 2: Abgeleitete Klasse von CWinApp erzeugen
    Schritt 3: Abgeleitete Klasse von CFrameWnd erzeugen
    Schritt 4: Die Header-Datei einbinden
    Schritt 5: Ein Objekt der abgeleiteten Anwendungsklasse erzeugen
    Schritt 6: Ein Objekt der abgeleiteten Fensterklasse im Konstruktor CMyWindow::CMyWindow() erzeugen
    Schritt 7: CWinApp::InitInstance() überschreiben

    Die in der Header-Datei enthaltenen Klassen CMyApplication und CMyWindow sind "Baupläne" für das Applikations- und Fensterobjekt.

    In Schritt 5 wird mit

    CMyApplication MyApp;
    

    das Applikationsobjekt erzeugt.

    In Schritt 7 wird mit

    m_pMainWnd = new CMyWindow;
    

    das Fensterobjekt auf dem Heap erstellt.

    Der Assistent erzeugt prinzipiell den gleichen Code, jedoch nicht so kompakt erkennbar. 😉

    [ Dieser Beitrag wurde am 29.06.2003 um 07:00 Uhr von Erhard Henkes editiert. ]



  • int main(int argc,char * argv[])

    Ich denke, man sollte Einsteiger mit solchen unwichtigen Details zunächst nicht behelligen. Ein schlichtes

    int main(){...; return 0;}
    

    reicht hier m.E. aus.



  • Hallo,
    das sieht alles irgendwie nicht sehr nach Standard-C++ aus.


Anmelden zum Antworten