Der perfekte Anfang



  • "Hello Word" ist bei mir schon an der Reihe gewesen. Jetzt möchte ich gern ein kleines Programm schreiben. Am besten einen Taschenrechner.
    Meine 1. Frage: Wie mache ich eine Form, und setze darauf einen Button mit ein paar Events.



  • wenn du nicht zufälligerweise den Borland C++ Builder hast, dann gehts für dich erstmal garnicht. Ok, es ginge, aber da wärst du garantiert verloren.

    btw: in ner konsole kann mana uch einen taschenrechner programmieren.



  • Okay, dann in ner Konsole. Wie gehe ich vor?
    Also eine Form hab ich schon:

    // calc
    //
    
    #include <windows.h>
    #include "calc_res.h"
    
    LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
    
    HINSTANCE hInstance;
    HWND hWindow;
    
    // WinMain
    
    int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
    {
       WNDCLASS wc;
       MSG msg;
       //HACCEL hAccelTable;
    
       if (!hPrevInst)
       {
          wc.lpszClassName="calcClass";
          wc.lpfnWndProc=MainWndProc;
          wc.style=CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
          wc.hInstance=hInst;
          wc.hIcon=LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON1));
          wc.hCursor=LoadCursor(NULL, IDC_ARROW);
          wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
          wc.lpszMenuName=MAKEINTRESOURCE(IDR_MAINMENU);
          wc.cbClsExtra=0;
          wc.cbWndExtra=0;
          RegisterClass(&wc);
       }
    
       hWindow=CreateWindow("calcClass","Application",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,350,NULL,NULL,hInst,NULL);
       hInstance=hInst;
    
       ShowWindow(hWindow,nCmdShow);
       UpdateWindow(hWindow);
    
       //hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_ACCELATOR1);
    
       while(GetMessage(&msg,NULL,0,0))
       {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
       }
    
       return msg.wParam;
    }
    
    // MainWndProc
    
    LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam,LPARAM lParam)
    {
       static int wmId, wmEvent;
    
       switch(msg)
       {
          // WM_COMMAND
    
          case WM_COMMAND:
             wmId    = LOWORD(wParam);
             wmEvent = HIWORD(wParam);
             switch(wmId)
             {
                // About
    
                case ID_FILE_EXIT:
                   PostQuitMessage(0);
                   break;
    
                case ID_HELP_ABOUT:
                   DialogBox(hInstance, (LPSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)AboutDlgProc);
                   break;
    
                default:
                   return DefWindowProc(hWnd, msg, wParam, lParam);
             }
             break;
    
          // WM_DESTROY
    
          case WM_DESTROY:
             PostQuitMessage(0);
             break;
    
    		// DEFAULT
    
    		default:
             return(DefWindowProc(hWnd, msg, wParam, lParam));
       }
       return 0;
    }
    
    // AboutDlgProc
    
    LRESULT CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
       switch (message)
       {
          case WM_INITDIALOG:
             break;
    
          case WM_COMMAND:
             if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
             {
                EndDialog(hDlg, LOWORD(wParam));
                return TRUE;
             }
             break;
       }
       return FALSE;
    }
    
    // calc : Resource File
    
    #ifndef WS_VISIBLE
    #include <windows.h>
    #endif
    
    #include "calc_res.h"
    
    IDD_ABOUTBOX DIALOGEX DISCARDABLE 20, 20, 208, 86
    STYLE WS_CAPTION | WS_POPUP
    CAPTION "About calc"
    FONT 8, "Tahoma"
    BEGIN
        DEFPUSHBUTTON "OK",IDOK,151,7,50,14,0
        PUSHBUTTON "Cancel",IDCANCEL,151,24,50,14,0
    END
    
    IDR_MAINMENU MENU DISCARDABLE 
    BEGIN
        POPUP "&File"
        BEGIN
            MENUITEM "&Exit", ID_FILE_EXIT
    	 END
        POPUP "&Help"
        BEGIN
            MENUITEM "&About", ID_HELP_ABOUT
        END
    END
    
    IDI_ICON1 ICON DISCARDABLE "E:/Programme/Relo/images/app.ico"
    
    // calc : Resource Defs
    
    #define IDD_ABOUTBOX   1001
    #define IDI_ICON1      1002
    #define IDR_MAINMENU   1003
    #define ID_FILE_EXIT   1004
    #define ID_HELP_ABOUT  1005
    


  • Imho ist so'n richtiger Taschenrechner aber ne nicht wirklich einfache Sache.
    Jedenfalls, wenn er Punkt-vor-Strichrechnung und Klammern können soll.



  • Da du ja nach dem perfekten Anfang fragst:
    Verstehst du denn den Quellcode soweit selber, den du hier gepostet hast?

    Wohl nicht, sonst würdest du ihn nicht als Consolenapplikation verkaufen wollen.

    Copy&Paste ist Müll 👎



  • Hast wohl was überlesen:

    Also eine Form hab ich schon:

    Eine Konsole sieht so aus:

    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
       getchar();
       return 0;
    }
    

    Zwar check ich 0, aber egal.

    Und warum kommt man mir mit soviel ärger entgegen?



  • Hi!

    1. Wieso wollen immer alle nach Hello World gleich ein GUI-Programm basteln? Kein Wunder das die Dinger meistens Müll sind (zumindest intern).
    2. Visual Studio geht doch auch für Forms, wobei ich zugebe das die Verwendung von Standard-C++ nicht ganz angenehm ist.
    3. Mach das mal in der Konsole, das ist auch sehr anspruchsvoll. Vor allem wenn du Klammerrechnung und Punkt-vor-Strich-Rechnung beachtest. Habe hier noch Struppis Taschenrechner rumliegen, weiß grad gar nicht ob der noch online ist (hatte den mal hochgeladen in mehreren Versionen). Aber kannst ja mal versuchen sowas zu programmieren, achja und mit negativen Zahlen muss er auch umgehen können.

    Code-Hacker



  • @Jen:
    Ich komme dir nicht mit Ärger entgegen. Im Gegenteil.

    Aber wenn du nach dem perfekten Anfang fragst, musst du dir auch sagen lassen, dass es nicht viel bringt, sich ein Programm zusammenzuklicken, ohne es zu verstehen.

    Kauf dir ein gutes Buch über C++.
    Dies ist kein blöder Spruch, sondern ernstgemeint.
    Davon profitierst du jetzt mehr, und kommst auch schneller zu brauchbaren Programmen als so.



  • Jen schrieb:

    Und warum kommt man mir mit soviel ärger entgegen?

    Vielleicht deswegen:

    Zwar check ich 0, aber egal.

    Schon verloren. Wenn du es nicht verstehst, wie willst du es dann programmieren? 😕

    Versuchs nochmal mit Hello World, wenn du den code von main nicht verstehst.
    Warum willst du nicht lieber ein Programm schreiben, das irgendwelche netten Berechnungen macht, oder ein Programm, das nützlicherweise Eingaben in eine Datei umleiten kann und vielleicht ein paar Editor-Funktionen hat, und so weiter?
    Einen Taschenrechner programmieren kannst du nach Hello World nicht. Oder du bist ein von uns verkanntes Genie, dann verzeih mir Meister, ich bin nicht würdig 💡 😉



  • Wollt ich heute machen, hab aber vergessen. Naja, morgen hoffentlich.
    Ich hab PHP ja auch aus 3 Büchern gelernt 😃

    Aber mit was soll ich nun anfangen?
    Ich weiß schon was:

    Ich möcht gern wissen, wie ich in einer Konsole einfach so 2+2 ausrechnen kann.
    Nur die Befehle, wie ich eine Konsole herstellen kann, die dann Ausgibt
    2+2=4 (aber das ganze soll ausgerechnet werden) 🙂
    Wenns geht auch erklären 😃



  • Jen: versuch's doch mal mit nem Tutorial. Auf www.c-plusplus.net sind ganz viele. Ich würde Dir das von Volkard oder von ShadeOfMine empfehlen.

    Wenn Du spezielle Fragen hast, dann frag hier jeder Zeit. Aber wir machen hier kein Tutorial wo wir Dir alles erklären. Erst selber nachlesen und wenn Du was nicht verstehst, dann stehen wir Dir gerne zur Verfügung.

    MfG Jester



  • @Jan
    Tja, du liest eine Zahl ein (von der Tastatur), eine andere ( => auch von der Tastatur), und dann benutzt du "+", um im Quellcode zu schreiben, dass zur Programmlaufzeit eine Addition stattfinden soll. Über die Bildschirmausgabe kannst du es dann lesen.
    Nun müsste man nur noch wissen wie man von der Tastatur liest und auf den Bildschirm ausgibt. Hier dürfte dir cout und cin weiterhelfen.
    Hier erfährst du alles darüber, was du nicht verstehst, ignorierst du. Du musst soviel wissen, dass du mit
    "cout << xyz" etwas ausgibst, wobei xyz ein string, eine Zahl, ein double, o.Ä. sein kann. mit cin >> xyz liest du von der Tastatur, wobei xyz oben genanntes ist.
    Das ist schon alles. Noch ein bisschen Tutorials lesen, Hello World studieren, und der Aha-Effekt kommt von selbst.
    Ich geb dir keinen Quellcode weil ich mich verpflichtet fühle, dir das selber programmieren beizubringen, o Meister 😃



  • Jen schrieb:

    Zwar check ich 0, aber egal.

    Lies doch erstmal ein C++ Buch oder Tutorial. Man programmiert ja nicht einfach, weil man meint, man will jetzt programmieren 🙄

    http://tutorial.schornboeck.net/inhalt.htm

    Und warum kommt man mir mit soviel ärger entgegen?

    Weil das dein Verhalten verlangt. Du hast anscheinend dich kein bisschen mit C++ außeinander gesetzt und verlangst, dass die Leute hier dein Programm coden.

    wmfrs



  • Is ja alles wurscht 😃
    Ich schau, das ich morgen mir ein Buch besorg.



  • Hab mir jetzt ein buch von Markt und Technik gekauft mit fast 2000 Seiten. Leider hats mein Vater bis Weihnachten beschlagnahmt :p



  • Ihr hättet ihm besser auch noch gesagt, welche Bücher zu empfehlen sind. 😞



  • Wieso, die "Dicken Dinger" von MuT sind doch alle empfehlenswert 😉
    Das C/C++ Kompendium von Dirk Louis z.B. besonders.



  • Hoffentlich heißt es nicht irgendwie "C++ in 21 Tagen" ⚠



  • Nicht im 2000er Seiten Bereich 😉

    EDIT:
    *lol* Hab grad mal reingeschaut - das C++ Kompendium hat ja auch nur knapp 1150
    Kommt einem irgendwie mehr vor 💡



  • Optimizer schrieb:

    Hoffentlich heißt es nicht irgendwie "C++ in 21 Tagen" ⚠

    lol 🤡

    Ich hab das "Visual C++ 6 in 21 Tagen" hier liegen, so ein Schrottbuch, hat aber nur ~840 Seiten 😃


Anmelden zum Antworten