ich möchte gerne zu Laufzeit ein Dialogfenster öffnen und damit globale Variablen einstellen.
Das ist doch bstimmt ein Standartproblem, dass schon jemand gelöst hat.
Selber ein Fenster zu erstellen mi Combobox und Textfeldern und solchen sachen ist zwar möglich, aber zu kompliziert.
Ich stelle mir das ähnlich wie die Verwendng von Messageboxen vor. Durch einen einzgen Befehl kann eine Messagebox angezeigt weren. Geht das mit Dialogfenstern nicht auch irgendwie?
So stelle ich mir das vor: Befehl_öffne_DialogBOX(float * Zeiger_auf_zu-verändernde_variable, weitere argumente );
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Unter Delphi gibts dafür InputQuery, das öffnet einen kleinen Dialog mit Eingabe und liefert einen String zurück den man dann entsprechend umwandeln kann.
Das waren zwei Fragen von mir in einem, das Betriebssystem war die weniger wichtige
Es wäre auch möglich, dass du gar kein GUI-Framework benutzt und selbst direkt auf die Windows-API zugreifst? Da wäre dann die Windows-Version interessant.
(Oder ist das kein Tippfehler und "winows" ist irgendein kleines Framework das Google/Wikipedia nicht kennt?)
Gut...ich arbeite in der Regel unter Linux mit Qt...entsprechend hab ich von der WinAPI keine Ahnung. Aber ich bin sicher das sich hier noch jemand mit Ahnung melden wird
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Naja für C++ spezifische API Fragen ist vermutlich eins der gut besuchten C++ Foren die bessere Wahl. Dort rennen dann auch bestimmt zu jeder zeit mehr als 100User rum die sowas schonmal gemacht haben. Hier bist du diesbezüglich etwas außerhalb der HotTopic-Zone.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Dieses Dialogfeld selber zu machen ist interessant und lehrreich, aber ich brauche eure Hilfe, sonst klappt das nicht.
Ich habe schwierigkeiten das zweite Fenster zum funktionieren zu bringen. Das Endergebnis soll so aussehen:
MeinDialog(&a,&b,&c...);
wobei a,b,c variablen vom Typ float sind, die ich verändern will.
Vorerst bin ich jedoch nur damit beschäftigt das fenster öffnen und schliessen zu können. Unfreiwilligerweise hat sich die Funktion um zwei Argumente erweitert:
Dieses Dialogfeld selber zu machen ist interessant und lehrreich, aber ich brauche eure Hilfe, sonst klappt das nicht.
Ich habe schwierigkeiten das zweite Fenster zum funktionieren zu bringen. Das Endergebnis soll so aussehen:
MeinDialog(&a,&b,&c...);
wobei a,b,c variablen vom Typ float sind, die ich verändern will.
Vorerst bin ich jedoch nur damit beschäftigt das fenster öffnen und schliessen zu können. Unfreiwilligerweise hat sich die Funktion um zwei Argumente erweitert:
Aufgerufen wir die Funktion in der Hautschleife in WinMain()
if(keys['U'])MeinDialog(hInstance,hWnd);
Es tritt folgendes Problem auf: weil ich die Taste 'U' zu lange gedrückt halte, wird die Funktion mehrfach aufgerufen.
Wenn ich das Dialgfenster auf dem Haupfenster verschiebe, wird das Hauptfenster nicht neu gezeichnet. Wie löst man dieses Problem fachgerecht, sodass mein Dialogfeld so zu handhaben ist, wie man das von den Messageboxen auch kennt?
vielen Dank für deine Antwort. Was du vorschlägst habe ich auch schon versucht.
Leider ist es darangescheitert, dass ich die Meindialogfunktion und deren Fensterprozedur in eie andere Datei geschrieben habe. Deshalb hat die Fensterprzedur keinen Zugriff auf MeindialogOffen.
Ich habe vrsucht der FUnktion einen boolschen Rückgabewert zu geben. Aber das hat irgendwie nicht geklappt.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Zitat:
Aufgerufen wir die Funktion in der Hautschleife in WinMain() if(keys['U'])MeinDialog(hInstance,hWnd);
Es tritt folgendes Problem auf: weil ich die Taste 'U' zu lange gedrückt halte, wird die Funktion mehrfach aufgerufen.
Das Betriebssystem macht hier genau das, was Du von ihm verlangst: Taste "U" ist gedrückt, also Fenster aufmachen. Besser wäre es, das Fenster auf Mausklick aufzumachen, denn dann hat der Benutzer eine Chance, zu merken, dass er selber schuld ist: wenn er zweimal klickt, macht er eben zwei Fenster auf.
Zitat:
Wenn ich das Dialgfenster auf dem Haupfenster verschiebe, wird das Hauptfenster nicht neu gezeichnet.
Das hängt vermutlich damit zusammen, dass Du während das Fenster offen ist, Folgendes machst:
Du machst da quasi eine neue Hauptschleife auf. Möglicherweise lässt Du damit dem Betriebssystem gar keine Zeit, dem Hauptfenster eine "Paint"-Nachricht zu schicken. Entweder Du machst wirklich einen neuen Thread (da weiß ich aber nicht Bescheid) , dann fährt das BS wirklich zweigleisig, oder Du steuerst alles über die eine Hauptschleife, dann muss man gewährleisten, dass jedes Fensterchen seine Botschaften noch zugestellt bekommt.
Und Du solltest Dich nicht wundern, wenn Du dann in diesem neuen Fenster nicht zeichnen kannst, es ist sehr wahrscheinlich, dass ein neues Fenster einen neuen Rendering Context braucht (Windows und Linux verhalten sich in diesem Aspekt ziemlich gleich )
Alles in allem wäre es vielleicht gut, die Motivation zu überdenken: willst Du wirklich nur einen kleinen Dialog ablaufen lassen, oder willst Du etwas über Betriebssysteme lernen. Denn im zweiten Fall muss man VIEL mehr Zeit einplanen. Ich finde, das sollte man sich bewußt machen. Klar, das ist interessant, aber möglicherweise rechnet es sich nicht. Viele Grüße Traude
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.