Grafikoberflächen unter DOS in C (nicht C++)
-
Hi,
gibt es die Möglichkeit Applikationen mit grafischen Benutzeroberflächen und Mauseinbindung unter dem Betriebssystem DOS in der Sprache C zu programmieren. Wer erinnert sich nicht noch an den guten alten Texteditor mit zweifarbigen Menüs und dem Luxus der Maus, mit dem man die config.sys und die autoexec.bat nach seinen Wünschen manipulieren konnte.
Ich frage deshalb, weil ich damals in der Schule mit PASACAL angefangen habe zu coden und mit dieser Sprache war das kein Problem, u.a. waren auch primitive 2 dimensionale Brettspiele möglich.
Falls C ebenfalls diese Optionen unter DOS ermöglicht, wäre es schön wenn mir jemand ein Buch empfehlen könnte, das genau darauf abzielt ( am besten für Fortgeschrittene oder bessere Anfänger, das so auf den Kenntnissen von Büchern wie "C lernen, verstehen, anwenden" von Andre Willms Addison-Wesley Verlag aufsetzt).
Ich denke es ist besser, bevor man in die Windowsprogrammierung mit C und der Standard Win32-API einsteigt, sollte man alles, was sich auf Vektoren, Zeiger, Strukturen und Unions bezieht, voll unter DOS ausreizen, da Windows wohl das ungeeigneteste Objekt für C Anfänger und Fortgeschrittene darstellt ( frei nach Charles Petzold dem Guru).
-
Die WinAPI hat ja auch nichts mit C zu tun. Wer C kann kann nicht gleich auch WinAPI. C ist nur das Werkzeug. Die WinAPI (oder jede andere z.B DirectX) das Material, das wir (Programmierer) in Form bringen müssen.
Schau dich mal im Internet nach TurboC 2.0 von Borland.
-
Das mit der Win23-API war auf Windows bezogen und nicht auf DOS.
Es muss doch möglich sein mit irgendwelchen C Befehlen Grafiken unter DOS zu erstellen.
Wozu brauche ich denn da so einen alten Compiler, ich möchte weiterhin meinen C++ Builder 6.0 benutzen.Kennt jemand ein paar alte Bücher zu dem Thema?
-
Win23-API
lol - den Vertipper muss ich mir merken
Imho brauchst du einen so alten Compiler, da du ja eine DOS (16 bit) Anwendung erstellen willst - nicht zu verwechseln mit 32bit-Konsolen-Anwendungen
-
Ich hatte auch einen Denkfehler. Ich meinte nicht 16-bit DOS, sondern die 32-bit Konsole. Also kann ich das auf einem aktuellen Compiler machen.
Das ändert aber letztendlich nichts daran, dass es theoretisch möglich sein muss Programme für die Konsole zu schreiben, die eine graphische Benutzeroberfläche haben ( wenn auch nur eine ganz primitive), da ja auch alle 16 bittigen Dos Programme auf der Konsole laufen.
Kennt also wer die Header und die dazugehörigen Befehle (noch besser ein Buch darüber) mit denen dies möglich ist.
-
Du kannst in der Konsole Menüs Buttons ect. beutzen. Die sehen aber halt wie du es sagts primitiv aus. Wie in den alten Zeiten.
Ich suche mal nach der Seite wo ich ein Beispiel gesehen habe.
-
Original erstellt von <Gast2000>:
da ja auch alle 16 bittigen Dos Programme auf der Konsole laufen....DAS wär' schön...
-
Wenn man alle Features in der Win32 Konsole benutzen will (z.b Cursor setzen oder Farben ändern), so muss man auf WinApi zurück greifen. Denn die Console ist eben auch ein "ganz normales" Fenster. Evtl. gibts aber auch Dinge wo dies schon gewrappt ist, schau mal in der Consolenabteilung vorbei.
-
mit dem borland c++ 5 läst sich ohne probleme eine DOS Anwendung programmieren, in der man dann per bgi grafiken programmieren kann. wie das mit der maus ist, weiss ich nicht. die maximalste auflösung die ich bis etz erreicht hatte war 640x480x16 ... es soll aber bgi's geben, die mehr können.
-
also, wenn du für Win 9x und eventuell auch WinXP(Kompatibilitätsmodus) programmieren willst, kannst du deine Maus und Grafik Sachen ja per Assembler Interrupts programmieren
es sollten sich über Google einige finden lassen
-
Gast schrieb:
Hi,
Ich denke es ist besser, bevor man in die Windowsprogrammierung mit C und der Standard Win32-API einsteigt, sollte man alles, was sich auf Vektoren, Zeiger, Strukturen und Unions bezieht, voll unter DOS ausreizen, da Windows wohl das ungeeigneteste Objekt für C Anfänger und Fortgeschrittene darstellt ( frei nach Charles Petzold dem Guru).
Aus diesem Grund gibt es auch Unix Betriebsysteme.
-
Gast schrieb:
Wozu brauche ich denn da so einen alten Compiler, ich möchte weiterhin meinen C++ Builder 6.0 benutzen.
Oh Gott oh gott ein Anfänger.
Hinweis: Auch der Compiler des C++ Builder 6.0 ist unter der Haube ein Kommandozeilentool so wie alle vernpnftigen Compiler.
Das was du da nämlich üblicherweise bei C++ Builder 6.0 oder VC++ zu sehen bekommst ist nur eine IDE, nicht der eigentliche Compiler.
-
einfach mal -wie tggc sagte- im konsolenforum schauen für 16 bit steht da auch ne menge.
ebenso für 32 bit konsolenapi.zur c grafik kann der djgpp ne menge, da steht einiges im andere copilerforum(suchen)
compiler laufen bei mir auf dem alten trollson (16 bit) ein passender djgpp und ein alter borländer.
maus: zu 32 bit steht was im faq der konsole, zu 16 bit hier:
#include <stdio.h> #include <dos.h> #include <stdlib.h> #include <conio.h> #define MOUSE_LBUTTON 1 #define MOUSE_RBUTTON 2 #define MOUSE_MBUTTON 3 const int MOUSE_INT=0X33;; int mouse_init(); void mouse_on(); void mouse_off(); int mouse_getpos(int*px, int*py); int main(){ int tasten; int posx, posy; if ((tasten=mouse_init())==-1) { printf("keine maus da"); return EXIT_FAILURE; } printf ("Maus mit %d Tasten installiert.\n", tasten); printf ("zum beenden druecke eine maustaste\n"); mouse_on(); while(! (tasten=mouse_getpos(&posx, &posy))); printf("an der position %d/%d wurde die ", posx, posy); if(tasten & MOUSE_LBUTTON) printf (" linke %d",MOUSE_LBUTTON ); if(tasten & MOUSE_RBUTTON) printf (" rechte %d",MOUSE_RBUTTON); if((tasten & MOUSE_MBUTTON)==MOUSE_MBUTTON) printf (" mittlere %d",MOUSE_MBUTTON); //mouse mbutton hat mehrere bits printf (" Tasten gedrueckt\n"); mouse_off(); return EXIT_SUCCESS; } int mouse_init(){ union REGS regs; regs.x.ax=0; int86(MOUSE_INT, ®s, ®s); if (regs.x.ax!=0XFFFF) return -1; return regs.x.bx; } void mouse_on(){ union REGS regs; regs.x.ax=1; int86(MOUSE_INT, ®s, ®s); } void mouse_off() { union REGS regs; regs.x.ax=2; int86(MOUSE_INT, ®s, ®s); } int mouse_getpos(int*px, int*py) { union REGS regs; regs.x.ax=3; int86(MOUSE_INT, ®s, ®s); if(px)*px=regs.x.cx>>3; if(py)*py=regs.x.dx>>3; return regs.x.bx & 7; }
achte auf einen gescheiten compiler.
viel spaß
-
such dir ein GLUT tutorial lernste wie man aus der konsole heraus maus,tastatur,grafik nutzen/machen kann...
rapso->greets();
-
rapso schrieb:
such dir ein GLUT tutorial lernste wie man aus der konsole heraus maus,tastatur,grafik nutzen/machen kann...
rapso->greets();
GLUT = OpenGL Utility Toolkit
hat nichts mit Konsole zu tun
GLUT kann man sich wie eine kleine Engine für OpenGL vorstellen, da GLUT ja OpenGL Funktionen kapselt
deshlab funktioniert GLUT wie OpenGL, auf Windows Ebene
-
Hauptmann schrieb:
hat nichts mit Konsole zu tun
/* * triangle.c -- A simple example of OpenGL and GLUT. */ #include <GL/glut.h> void displayCB(void)/* function called whenever redisplay needed */ { glClear(GL_COLOR_BUFFER_BIT);/* clear the display */ glColor3f(1.0, 1.0, 1.0);/* set current color to white */ glBegin(GL_POLYGON);/* draw filled triangle */ glVertex2i(200,125);/* specify each vertex of triangle */ glVertex2i(100,375); glVertex2i(300,375); glEnd();/* OpenGL draws the filled triangle */ glFlush();/* Complete any pending operations */ } void keyCB(unsigned char key, int x, int y)/* called on key press */ { if( key == 'q' ) exit(0); } int main(int argc, char *argv[]) { int win; glutInit(&argc, argv);/* initialize GLUT system */ glutInitDisplayMode(GLUT_RGB); glutInitWindowSize(400,500);/* width=400pixels height=500pixels */ win = glutCreateWindow("Triangle");/* create window */ /* from this point on the current window is win */ glClearColor(0.0,0.0,0.0,0.0);/* set background to black */ gluOrtho2D(0,400,0,500);/* how object is mapped to window */ glutDisplayFunc(displayCB);/* set window's display callback */ glutKeyboardFunc(keyCB);/* set window's key callback */ glutMainLoop();/* start processing events... */ /* execution never reaches this point */ return 0; }
source: http://www.cs.arizona.edu/classes/cs433/spring02/opengl/code/triangle.c
das würde ich nicht als nichts bezeichnen, "Gast" wollte aus der console-application heraus grafik und mouseinput nutzen können, das ist hiermit [glut] leicht möglich.
rapso->greets();
-
er schrieb Betriebssystem DOS
und meines Wissen nach, gibt es in DOS kein OpenGL
-
ich entnehme aus seinen posts dass er kein winapi machen möchte, sondern aus einer konsolenanwendung heraus "alles, was sich auf Vektoren, Zeiger, Strukturen und Unions bezieht, voll unter DOS ausreizen" möchte, deshalb hab ich ihm GLUT vorgeschlagen. trifft auf eigentlich alle seine verlangen... es seiden er sieht nen riesigen nachteil in der Konsole gegenüber DOS.
rapso->greets();
-
Gast2000 schrieb:
Ich hatte auch einen Denkfehler. Ich meinte nicht 16-bit DOS, sondern die 32-bit Konsole. Also kann ich das auf einem aktuellen Compiler machen.
er änderte seine meinung auf 32-bit konsole und die ist nicht dos
-
rapso schrieb:
ich entnehme aus seinen posts dass er kein winapi machen möchte, sondern aus einer konsolenanwendung heraus "alles, was sich auf Vektoren, Zeiger, Strukturen und Unions bezieht, voll unter DOS ausreizen" möchte, deshalb hab ich ihm GLUT vorgeschlagen. trifft auf eigentlich alle seine verlangen... es seiden er sieht nen riesigen nachteil in der Konsole gegenüber DOS.
rapso->greets();
ich denke eher, das er direkt in der Konsole etwas zeichnen will, und nicht in einem Window