Zum Inhalt springen

Arparso

Mitglieder
  • Gesamte Inhalte

    3
  • Benutzer seit

  • Letzter Besuch

  1. Das ist mir ja durchaus klar, ABER zum Zeitpunkt von OnInitDialog ist das Dialogfenster noch gar nicht gezeichnet worden... wie sollte ich also irgendwelche graphischen Ausgaben machen (Text Labels sichtbar machen, ProgressBar bewegen), wenn das Fenster noch gar nicht "wirklich" da ist? @KlotzKopp: Danke für die Hilfe Ich rufe jetzt in OnInitDialog() einen Timer auf, der wiederum in OnTimer() zerstört wird (KillTimer()). Sofort danach wird wie gehabt IntegrityCheck() aufgerufen und läuft diesmal ohne Debug Assertion Error durch. Funktioniert jetzt also erstmal alles und ich kann mir diese dubiose OnPaint() Methode sparen (mir war schon klar, dass das nicht grad die eleganteste Lösung war - darum bin ich ja hier ).
  2. Hmm, das würde natürlich wieder die Ausführung etwas verzögern. Wie sähe denn ein brauchbarer Timer aus? Sprich, welche Funktionen gibt es für sowas? Viel will ich ja gar nicht machen. Die Funktion überprüft im Hintergrund ein paar Einstellungen, liest ein bisschen was aus der Registry, lädt die Konfigurationsdatei, usw. Nebenbei werden im Dialogfenster entsprechende "Static Text" Elemente sichtbar gemacht, die dann eben anzeigen, womit die Funktion grad beschäftigt ist. Gleichzeitig wird die ProgressBar weiter bewegt. In der Regel sollte die ganze Funktion auch relativ schnell abgeschlossen sein, so dass der User kaum was davon mitbekommt... Genau so mach ich es ja auch. Hier ist meine OnPaint() Funktion: void StartUp::OnPaint() { CPaintDC dc(this); // device context for painting if(firstStart == TRUE && IsWindowVisible()){ IntegrityCheck(); firstStart = FALSE; } } Der if-Teil ist von mir; firstStart ist ein Member des Dialogs, der im Konstruktor mit TRUE initialisiert wird. (Übrigens danke für den IsWindowVisible() Tipp ). Die Funktion IntegrityCheck() sieht dann so aus: void StartUp::IntegrityCheck() { firstStart = FALSE; [..] // irgendwelcher Code EndDialog(IDOK); } Selbst wenn ich den Code vor EndDialog() weglasse und wirklich nur noch EndDialog() drin steht, bekomme ich den Debug Assertion Error. Im Release Modus kommt da nix und alles scheint auch problemlos zu funktionieren... nur eben im Debug Modus nervt das doch ganz schön. Das Dumme daran ist auch, dass ich bei dem Assertion Error zwar auf "Retry" drücken kann, aber danach meine Anwendung nur abschmiert, statt mich irgendwie debuggen zu lassen. Beim Klick auf "Ignore" läuft die Anwendung normal weiter, als wäre nix gewesen...
  3. Hallo, bin noch Programmieranfänger und hätte da eine Frage. Arbeite zur Zeit an einem kleinen, dialog-basierten Tool, welches ich mit Visual C++ 6.0 erstelle. Beim Start des Tools soll dabei automatisch zunächst ein Dialogfeld mit DoModal() aufgerufen werden, welches automatisch verschiedene Einstellungen initialisiert und das auch entsprechend darstellt. Das klappt auch alles wunderbar, nur kriege ich im Debug-Modus einen "Debug Assertion Error" in der wincore.cpp, Zeile 3486. Ein paar Details. Mein Hauptdialog enthält als Member das aufzurufende Dialogfeld. Dieses wird dann in der OnInitDialog-Funktion mittels DoModal() aufgerufen. In der OnPaint-Funktion des aufgerufenen Dialogs wird dann die auszuführende Funktion gestartet (auch wirklich nur einmal, nicht bei jedem Paint) und läuft problemlos durch. Sobald die aufgerufene Funktion aber versucht, das Dialogfenster wieder mittels Aufruf von OnOK, OnCancel oder EndDialog zu beenden, kommt besagter "Debug Assertion Error". Der Rest des Programms läuft dann normal weiter. Tja, hab keine Idee, wieso und warum. Außerdem wär ich für Tipps dankbar, die mir verraten, wie man sofort nach dem Aufruf eines Dialogs Funktionen ausführen kann. OnInitDialog ist leider keine Option, da die Funktion einige Elemente des Dialogfensters beeinflusst (u.a. eine ProgressBar) und das keinen Sinn machen würde, wenn das Fenster noch nichtmal dargestellt wird.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...