Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Korowai

unregistriert

1

15.10.2016, 07:09

WINAPI Textausgabe child window bei Button

Hi,

ich habe eine Frage bezüglich der Steuerung von nach- und nach- Textausgaben in einem modalen Dialog. Ich habe einen modalen Dialog mit einem Editcontrolfenster.
In diesem Fenster sollen stückchenweise Textausgaben erfolgen, immer dann, wenn eine entsprechende Messagebox mit OK Klick bestätigt wurde.

Leider durchläuft das Programm erst alle Messageboxes, und gibt dann den Text auf einmal aus. Trotz InvalidateRect und UpdateWindow.

Kennt jemand das Problem und weiß einen Lösungsansatz?

Ich poste auch gerne die entsprechenden code Blöcke.

Danke

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

15.10.2016, 07:56

Das Problem wird immer bleiben, solange du den Main Thread blockierst. Wenn du zwischen den Boxen die Nachrichtenverarbeitung des Fensters aufrufen würdest, könnte es eventuell sauber durchlaufen. Sinnvoller könnte es aber sein die Nachrichtenverarbeitung komplett parallel laufen zu lassen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Korowai

unregistriert

3

15.10.2016, 13:09

Hmm,

soweit ich weiß, hat ein modaler Dialog in dem Sinne keine Nachrichtenverarbeitung. Er sitzt ja bloß auf dem main frame. Ich könnte es mit einem moduslosen Dialog probieren. Da muss ich mal nachlesen im Petzold....

Danke schon mal. Ich melde mich...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

15.10.2016, 15:11

soweit ich weiß, hat ein modaler Dialog in dem Sinne keine Nachrichtenverarbeitung. Er sitzt ja bloß auf dem main frame.

Natürlich hat ein modaler Dialog eine Nachrichtenverarbeitung, was glaubst du was die DialogBox() Funktion macht!? Die macht intern eine Nachrichtenschleife und returned erst, wenn der Dialog geschlossen wurde... ;)

Korowai

unregistriert

5

15.10.2016, 18:18

Dot

ja, du hast ja Recht. das meinte ich nicht. Lasst mich erstmal den Petzold nachschlagen. Vielleicht macht es ja was mit der GetDlgItem und einem kleinen Trick. Ich melde mich...

Korowai

unregistriert

6

17.10.2016, 04:44

Hi,

habe jetzt einige Dinge ausprobiert und komme nicht so recht voran.

Vielleicht sollte ich die Struktur etwas deutlicher machen, in der Hoffnung, dass jemand mir einen Tipp geben kann.

Ich habe zwischen den MessageBoxes versucht, über WM_ACTIVATE, SetFocus auf das Editfenster umzuschalten, in dem die Textausgaben erfolgen sollen. Leider ohne positives Ergebnis.

Vielleicht sollte ich noch erwähnen, dass der Ablauf Wechsel von MessageBoxes und Textausgabe im Editfenster sich in der WM_INITDIALOG befindet und zusätzlich in einer iterator Schleife eines Vector innerhalb dieser Funktion.

Gibt es noch eine Möglichkeit, da umzuschalten? Abgesehen von einem moduslosen Dialog?

Wäre es eine Idee, anstatt der MessageBoxes einen Button im Dialog abzulegen, der nach den jeweiligen Textblöcken zu druecken ist und der quasi die Iteratorschleife des Vector weiter laufen lässt. Kann ich das so machen?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

17.10.2016, 06:46

Lies doch einfach meinen Beitrag noch einmal. Da steht alles schon drin. Aktuell bringt es nämlich überhaupt gar nichts irgendwelche Windows-Messages zu verschicken, wenn deine Nachrichtenschleife nie ausgeführt wird, weil du den Main-Thread komplett synchron mit deiner "iterator Schleife eines Vector" und den synchronen Message-Boxen blockierst.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Korowai

unregistriert

8

17.10.2016, 16:03

Hi BlueC.,

Du musst mir da leider noch etwas auf die Sprünge helfen, ich verstehe nicht, was ich da tun kann. Momentan denke ich in die Richtung, dass der code im Dialog falsch verortet ist. Aber wo muss er hin? Wie kann ich die Nachrichtenverarbeitung anschubsen?

Über ein paar Stichworte zum googeln (war bisher ergebnislos) oder ein Code Schnipsel würde ich mich sehr freuen.
er Petzold bringt mich auf alle möglichen Ideen, aber nicht zum Kern des Pudels...

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

17.10.2016, 16:18

Quellcode

1
2
3
4
5
6
7
8
while(true) {
  showDialog1();
  showDialog2();
  showDialog3();
  showDialog4();

  renderWindow();
}


So in etwa funktioniert dein Code. Das Fenster wird erst bei renderWindow() neu gezeichnet. Bei showDialog() blockiert die Nachrichtenschleife. Was du jetzt also willst ist die showDialog Aufrufe auf mehrere Durchläufe der Schleife zu verteilen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

17.10.2016, 16:21

Vielleicht sollte ich noch erwähnen, dass der Ablauf Wechsel von MessageBoxes und Textausgabe im Editfenster sich in der WM_INITDIALOG befindet und zusätzlich in einer iterator Schleife eines Vector innerhalb dieser Funktion.

Was genau gedenkst du damit zu erreichen!? WM_INITDIALOG wird nur einmal aufgerufen und, so lange das nicht returned, blockiert dein Programm...

Werbeanzeige