Autor Thema: GUI  (Gelesen 11832 mal)

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« am: 20. December 2004, 21:40 »
GUI
so, da mein Paging ja hoffentlich bald funktionieren wird, mein MT steht, und das Task-Kommunikationssystem läuft, mache ich mir gedanken über eine GUI. ich weiß, einige halten die Idee eines OSs im RM für ein bisschen eigenartig ;-) aber ich werd das schon hinbekommen. hab mir jetzt folgende kommunikationsweise für die windows gedacht.
es gibt eine tabelle, in der steht für jedes proggy dessen caption, x- und y-koordinate und höhe und breite, welcher task es aktiviert hat, und ob es gerade aktiviert ist. wenn jetzt jemand mit der maus klickt, schaut die routine, wo er hingeklickt hat. schaut, welches fenster sich da im vordergrund befindet, und schickt an den inhabertask per msg-system die meldung, dass geklickt wurde, und wohin. der task muss also immer wieder schauen, ob ein klick erfolgte, wohin, und ob er da einen button oder so hat.
vorteile: man muss sich net um objekte, wie buttons & co kümmern. jeder task kann seine eigenen objekte machen, und muss sich net an die systemeigenen sachen, wie buttons und so halten, sondern kann auch eigenes proggen, und kann auch auf klicks auf ein bild und so reagieren. einfacher zu machen. jedes proggy kann entscheiden, wie und wann es auf was reagiert.

was haltet ihr davon? habt ihr euch darüber schon gedanken gemacht? wie würdet ihr es machen?

mfg

JN!

p.S: könnt auch was sagen, wenn ihr noch net mit dem gedanken spielt.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 20. December 2004, 21:49 »
GUI
naja ok, n paar sachen hätt ich da anzumerken
1) Dein System sieht scheinbar keinen Fensterwechsel durch klick auf fenster vor, bzw. was passiert wenn auf nen inaktives aber sichtbares fenster geklickt wird?
2) Nen paar Standartobjekte sollte es schon geben
3) Chieldwindows sind auch ne hilfreiche sache (also Fenster innerhalb von Fenstern, um sie z.b. an einen bestimmten bereich zu binden)
4) muss man sich auch unter windows nich an systemvorgaben halten, du kannst auch da mausposition + klicks abfragen und dann mit if das ganze machen...

naja, das wars wohl erstmal von meiner seite was mir so spontan als fast-non-osdever (sprich: gelegenheits-beispiel-kernel-modder) so dazu einfällt
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

sp

  • Gast
Gespeichert
« Antwort #2 am: 20. December 2004, 23:03 »
GUI
Ich hab mal eine kleine GUI mit dem BCB und Canvas geschrieben :).

Vielleicht helfen dir ja meine "Erfahrungen", also ich hatte eine Tabelle in der alle Fenster gelistet waren. Jedes Fenster hat eine eindeutige ID. Dazu gibt es noch eine Tabelle in der die Reihenfolge der Fenster gespeichert ist, also das Fenster welches ganz oben steht bis zu dem welchen ganz unten liegt. Wenn sich die Maus nun bewegt wird geschaut, ob das erste Fenster "getroffen" wurde, sollte das nicht der Fall sein wird das nächste geprüft bis die Liste abgearbeitet und man beim untersten angekommen ist. Sollte auch das nicht getroffen wurden sein, ist die Maus über den Desktop. Das könnte man jetzt auch noch ein wenig optimieren in dem man sich grob merkt in welcher Bildschirmseite welche Fenster liegen.

Für jedes Fenster wird im Speicher ein "BMP" angelegt, in dieses wird alles gezeichnet was das Fenster zeigt. Nachdem das Fenster vollständig gezeichnet wurde wird der Bildschirm aktualisiert. Das ginge anhand der Reihenfolgen-Tabelle, so brauchst du nur die Fenster-BMP neu in den Bildschirmspeicher kopieren dessen Fenster auch betroffen sind. Also angenommen du hast drei Fenster und das in der Mitte wird neu gezeichnet, dann reicht es wenn du das Mittlere und das Obere neu zeichnest bzw. das BMP in den Bildschirmspeicher kopierst.

Wenn Fenster einen Rand haben sollen kommt der nicht mit in das BMP, sondern wird beim laden drum-rum gezeichnet, so sind auch runde Rahmen einfach möglich.

Die Meldung der GUI per Messages an die jew. Application in deren Fenster etwas passiert (Hoover z.B.) ist eine gute Idee.

Wie gesagt, vielleicht helfen dir ja meine Erfahrungen irgendwie ... Leider finde ich den Source nicht mehr :(.

sp

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #3 am: 21. December 2004, 13:46 »
GUI
womit haste das geproggt? was ist Canvas und was ist BCB?
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

sp

  • Gast
Gespeichert
« Antwort #4 am: 21. December 2004, 13:52 »
GUI
BCB ist der Borland C++ Builder und Canvas ist das "Zeichnen"-API der Windows GUI. War eine simulierte GUI in einem Windows Fenster.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #5 am: 21. December 2004, 14:48 »
GUI
aso!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

sp

  • Gast
Gespeichert
« Antwort #6 am: 21. December 2004, 15:11 »
GUI
Dank Hardwareabstraktion ist der GUI ja egal ob sie auf ein eigenes Kernel oder ein Windows-API aufsetzt. Da ich damals noch keinen Grafiktreiber für mein OS hatte (und immer noch nicht habe...) war das eine einfache Möglichkeit mal ein bisschen damit zu experementieren.

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #7 am: 17. March 2005, 11:45 »
GUI
zuerst mal sorry für raufposten..  :oops:

ich habe dazu auch ne idee...

ich habe da also eine struktur für ein fenster. das fenster hat eine eindeutige id, merkt sich auch vonn welchem progi es erzeugt wurde und kennt die adresse eines, nennen wir es, ActionHandler... (wer schon mal in java gecodet hat weis von was ich spreche)... dann schickt quasi der kernel eine message an den actionhandler  wenn was passiert. so könnte man auch einen handler für mehrere fenster benutzen da ja jedes fenster ne id hat...

was meint ihr?

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #8 am: 17. March 2005, 15:10 »
GUI
so wollt ich das ggf machen, aber was ist, wenn das programm keinen handle hat?
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #9 am: 17. March 2005, 15:46 »
GUI
also das moven, grösse ändern etc das wird ja vom kernel übernommen, dass kann auch passieren wenn kein handler da ist. dann werden halt alle fenster mit einem standart handler initialisiert der nichts mit den messages macht.... da ist halt das programm dann unfähig auf button-clicks etc zu reagieren... das ist dann nicht dem kernel sein problem oder?

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #10 am: 17. March 2005, 16:14 »
GUI
ich werde warscheinlich alles auf die programme abwälzen, sprich der kernel, bzw die GUI-Verwaltung (soll  getrennt sein) wird einfach nur dem task, dem das fenster gehört eine msg schicken, wenn eine taste gedrückt wurde, und welche, und, ob geklickt wurde, und wo. damit hat jedes programm mehr spielraum bei der GUI und is net so gebunden, und das system muss net noch buttons und sonstwen verwalten ;)
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #11 am: 17. March 2005, 16:18 »
GUI
dafür werden dadurch die programme grösser und man hat mehr aufwand sie zu coden...

ich muss mir das ganze noch mal gründlich überlegen... ^^

noch ne frage: kann man in windows (z.B xp) unendlich viele fenster machen (bis speicher voll ist) oder haben die eine limite von beispielsweise 256 fenster? (das selbe mit laufenden programmen?)

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #12 am: 17. March 2005, 16:29 »
GUI
also wenn win multitasking mit TSS macht, ist bei 8191 programmen schluss, aber das wird wohl keiner schaffen :D bei fenstern weiß ich net.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #13 am: 17. March 2005, 16:32 »
GUI
ok!
ich habe mir scho so wenig ein fenster-mechanismuss vorgestellt. aber da wäre dann nur eine voreingestellte anzahl von fenster möglich, und der speicher würde auch schon vorhin reserviert (für die struktur)...
ich fand das kann es nicht wirklich sein..

(übrigens mein fehler war das ich die bytes mit VideoMem[pos++] eingeschrieben habe, da wird pos nach dem befehl erhöht. mit VideoMem[++pos] hat sich das erledigt ;) leider spuckt mein realpc immer noch falsches zeugs auf den bildschirm)

 

Einloggen