[HELP]C++ Grafikbefehle|es geht um ne 1

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von 3psil0n, 19. Januar 2005 .

  1. 19. Januar 2005
    hallo!!! hab ein großes problem:

    mein lehrer gibt demjenigen ne 1 in it der ein tutoriual/proggi schreibt findet um in c++ grafikbefelhe(also so linie kreis usw) verständlich zu machen.--

    er meinte hätt ihc ne liste mit den befehlen(hab ich), wie man sie einsetzt und ein prog schreiben dass ein fenster aufmacht ne linie zieht..hätt ihc ne 1


    wär halt genial vorm halbjahreszeigniss.. bitte bitte hoffentlich kann mir da jemand helfen..hab diverses im inet gefunden aber nichts wirklich brauchbares--
     
  2. 19. Januar 2005
    Warum könnt ihr hier nicht mal etwas präziesere Angaben zu euren Problemen machen???
    Dann könnte man viel einfacher und schneller helfen!

    Also du willst das in Visual C++ haben, ja?!
    In der Konsole ist es ja simpel, da verwendest du die graphics.h.

    In Visual C++ kannst du hierzu z.b. die Klasse CDC nutzen.

    Welche Befehle hast du denn da?
     
  3. 20. Januar 2005
    also mein lehrer will quasi ein programm das wie ein winfesnter sit da wird einn strich von mir aus von x5 nach x 15 gezogen..

    dann noch wie ich das eingeben muss..als dann halt des graphics.h und dann einfach bei
    void main()
    {
    bla bla x y bla
    bla
    }

    und das bla bla such ich

    die befehle hab ich gefunden

    Grafik
    _setvideomode(_VRES256COLOR) (graph.h) In den 640x480x256-Modus wechseln
    _setvideomode(_TEXTBW80); (graph.h) In den Textmodus zurückwechseln
    _setcolor (fa) (graph.h) Die Farbe festlegen mit der gezeichnet wird
    _setviewport(xt,yt,xb,yb) (graph.h) Ausschnitt festlegen worin gearbeitet wird; (xt,yt) wird zu (0,0)
    _moveto(x,y) (graph.h) Sich an die Stelle (x,y) setzen, bspw um eine Linie zu beginnen
    _lineto(x,y) (graph.h) Eine Linie zeichnen bis zu (x,y)
    _rectangle(_GBORDER, xt,yt, (graph.h) Ein Rechteck zeichnen; das Innere unverändert lassen
    xb,yb)
    _rectangle(_GFILLINTERIOR, (graph.h) Ein gefülltes Rechteck zeichnen
    xt,yt,xb,yb)
    _ellipse(_GBORDER,x1,y1,x2,x2) (graph.h) Zeichne einen Kreis oder eine Ellipse, ungefüllt. Darf nicht eine
    Linie oder ein Punkt sein. _GFILLINTERIOR für gefüllt
    struct textsettings ts; (graph.h) Mache die grafischen Schriften verfügbar
    _gettextsettings( &ts );
    _setcharsize (dy,dx) (graph.h) Lege Höhe und Breite eines grafischen Buchstabens fest
    _grtext( x, y, "Watcom") (graph.h) Schreibe beginnend an der Stelle (x,y) (oben links ersten
    Buchstabens), grafisch den angegebenen Text
    char *nam; ¿ nam = (char*) malloc(_imagesize(0,0,640,120)); ¿ _getimage(0,0,640,120,nam);
    (graph.h) Mache Platz im Speicher frei für das Bild nam; lese es
    anschliessend vom Bildschirm ein
    _putimage(190,90,nam,_GPSET); (graph.h) Setze Bild nam an diese Stelle, überschreibe die alte Stelle
    (_GPRESET: invertiert; _GAND: Pixelwerte zusammenzählen; _GOR: zusammen-or-en; GXOR: für Animationen
    free( nam ); (graph.h) Den Speicherplatz den nam einnahm wieder freimachen
    _getpixel( x, y ); (graph.h) Farbe des aktuellen Pixels ermitteln
    _setpixel( x, y ); (graph.h) Farbe des aktuellen Pixels ändern

    naja hab des mit ner win32anwendung mit #include"graph.h" probiert..graph.h gibts ent sagt er
    hoffe es sit lesbar
     
  4. 20. Januar 2005
    Ach so ja, du arbeitest vermutlich mit einem Microsaft Produkt, wie dem Visual Studio, oder?!

    Die graphics.h stammt von Borland und wird mit den Compilern ausgeliefert. Das Problem ist, das Windows keine BGI Graphics unterstützt (wie die der graphics.h von Borland).

    Microsoft hat aber meines Wissens auch nichts Vergleichbares da. Die Befehle in deinem Beitrag oben dürften auch von irgendeiner Library eines Drittanbieters sein.

    Du könntest das wohl nur mit OpenGL oder DirectDraw machen, was aber schon konplizierter wird. Die windows-Konsole unterstützt glaub ich auch nur Textzeichen.

    Die andere alternative wäre also nur einen DOS-Compiler wie den von Borland zu benutzen...
     
  5. 20. Januar 2005
    hm ja wir haben ms visual studio 6...

    also unser lehrer weis nicht wie das geht er will es aber wissen er würde gern mal was mit grafik machen meint er...
     
  6. 20. Januar 2005
    Ja gut, etwas mit Grafik zu machen ist ja nicht schwer, aber eben nicht in der Konsole!
    Wenn ihr einfach nur ein normales Windows Programm mit Fenstern macht, ist zeichnen etc. absolut easy, aber bei der Konsole wird es nun mal ziemlich harig...
     
  7. 21. Januar 2005
    ja ist das dann einfahc?

    und wie geht das?

    könntest du ne art tuto schrieben und nen quellcode..

    ??
     
  8. 21. Januar 2005
    Nun ja, einfach ist relativ. Ich weiß ja nicht wie gut du coden kannst.
    Das Problem bei Microsofts C++ Produkten ist, das man so ziemlich alles selbst machen muss. In deinem speziellen Fall ist wohl das Komplizierteste der Umgang mit den Device-Handles, wenn du soetwas noch nicht kannst.

    Eine Win32 Anwendung mit Fenster zu erstellen ist vollkommen einfach, du musst bei NEU nur am Anfang keine win32anwendung sondern ....naja...das andere eben auswählen... sry, ich hab das visual studio nicht und kann dir daher nicht sagen wie das da heißt. Windows Anwendung oder SDI Anwendung oder so vielleicht.

    Schlag deinem Pauker mal vor die sollen für die Schule Borland C++ Builder kaufen, der ist für den Anfang spitze, weil er einem viel arbeit abnimmt.

    Theoretisch hast du dein Problem doch gelöst oder?! Du kannst deinem Lehrer sagen es geht nicht!...oder meinste dafür gibts keine 1?!

    Wenn du es ernsthaft mit Visual C++ versuchen willst kann ich dir evtl. C++ in 21 Tagen uppen, da ist eine gute Lektion über ein einfaches Proggie, bei dem man mit der Maus farbige linien in dem Fenster zeichnen kann.
     
  9. 21. Januar 2005
    Am besten du machst das mit HDC , zuvor erstellst du dann natuerlich noch ein Fenster. Du koenntest natuerlich auch die Grafikschnittstelle DirectX verwenden , aber na ja das würde ich halt so machen ...

    Wir benutzen uebrigens im Info-unterricht Delphi , damit gestaltet sich die Programmierung fuer Anfaenger wesentlich einfacher , das Zeichnen von Linien ist mit der Canvas(Leinwand) ein Kinderspiel.

    Hier der Code zum erzeugen eines Fensters:

    ( Ist eine Windows 32-Anwendung - Erstellung: Projekte -> Windows-32-Anwendung -> Ein leeres Projekt erstellen ; dann eine CPP-Datei zum Projekt hinzufügen und folgenden Code einfügen)

    Code:
    #include <windows.h> // Windows Bibliothek
    
    // CALLBACK Funktion
    
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam, 
     LPARAM lparam)
     {
     switch(message)
     { 
     case WM_DESTROY: 
     {
     done = TRUE;
     PostQuitMessage(0);
     return 1;
     } break;
     default:break;
     } // switch
     return (DefWindowProc(hwnd, message, wparam, lparam));
     } // WindowProc
    
    
    int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprevinst,
     LPSTR lpcmdline, int ncmdshow)
     {
    
     WNDCLASSEX winclass;
     MSG message;
     const char szclassname[] = "Klassenname";
    
     winclass.cbSize = sizeof(WNDCLASSEX);
     winclass.style = CS_HREDRAW | CS_VREDRAW;
     winclass.lpfnWndProc = WindowProc;
     winclass.cbClsExtra = 0;
     winclass.cbWndExtra = 0;
     winclass.hInstance = hinst;
     winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
     winclass.hCursor = LoadCursor(NULL, IDC_ARROW); 
     winclass.hbrBackground = NULL;
     winclass.lpszMenuName = NULL;
     winclass.lpszClassName = szclassname;
     winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    
     if (!RegisterClassEx(&winclass))
     return(0);
    
     if (!(hwnd = CreateWindowEx(NULL,
     szclassname,
     "3D Spieleprogrammierung - Titelleiste",
     WS_POPUP,
     0,0,
     400,300,
     NULL,
     NULL,
     hinst,
     NULL)))
     return(0);
    
     // Windows Cursor ausschalten
    
    ShowWindow(hwnd,ncmdshow);
    UpdateWindow(hwnd);
    
    while(GetMessage(&message, NULL, 0, 0))
     {
     TranslateMessage(&message);
     DispatchMessage(&message);
    } // GetMessage
    
    return message.wParam
    
    }
     
    
    
    
    Wenn du jetzt auf MFC "umsteigen" willst , dann sag es *g* , dann kann ich mir weitere Erklaerungen über das HDCs sparen . Bei Bedarf kann ich dir auch das Erstellen des Fensters naeher erlaeutern ...

    Also schreib hier rein ob du wissen willst wie man dann weiter verfahren muss um Linien , Rechtecke etc zu malen ....

    @ResusPos: Ich glaube du meinst die MFC-Anwendungen ( In 21 Tagen C++ greift darauf auch zurück)
     
  10. 22. Januar 2005
    danke peter..aber keine ahnung muss ich die cpp datei dann leer machen und das einfügen oder dazwischen?

    weil da steht ja schon was
    hab klasse hinzufügen gemacht.. und dann steht da schon zeugs


    Code:
    #if !defined(AFX_SS_H__104291B3_D25A_4FC4_81EF_59DCF71604A1__INCLUDED_)
    #define AFX_SS_H__104291B3_D25A_4FC4_81EF_59DCF71604A1__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    class ss 
    {
    public:
     ss();
     virtual ~ss();
    
    };
    
    #endif // !defined(AFX_SS_H__104291B3_D25A_4FC4_81EF_59DCF71604A1__INCLUDED_)
    

    und ja ihc würd gern wissen wies weiter geht
     
  11. 22. Januar 2005
    Hier das genaue Vorgehen:

    Datei-> Neu -> Projekte -> Windows 32-Anwendung auswaehlen und Namen fuer das Projekt eintippen -> Leeres Projekt

    Datei->Neu->Dateien -> C++ - Quelldatei auswaehlen und Namen eingeben

    Nun kannst du in diese cpp-datei den obigen Code eingeben , in der Datei steht vorher nichts ...
     
  12. 23. Januar 2005
    --------------------Konfiguration: test - Win32 Debug--------------------
    Kompilierung läuft...
    test.cpp
    C:\Dokumente und Einstellungen\Sandi2\Desktop\test\test.cpp(12) : error C2065: 'done' : nichtdeklarierter Bezeichner
    C:\Dokumente und Einstellungen\Sandi2\Desktop\test\test.cpp(46) : error C2065: 'hwnd' : nichtdeklarierter Bezeichner
    C:\Dokumente und Einstellungen\Sandi2\Desktop\test\test.cpp(55) : error C2440: '=' : 'struct HWND__ *' kann nicht in 'int' konvertiert werden
    Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    C:\Dokumente und Einstellungen\Sandi2\Desktop\test\test.cpp(71) : error C2143: Syntaxfehler : Fehlendes ';' vor '}'


    hm?

    das sind fehler mit denen ich leider nix anfangen kann..


    weißt du was?

    hab das von dir kopiert...
     
  13. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.