Announcement

Collapse
No announcement yet.

Variablen eines Dialogfelds in SDI-Fenster anzeigen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Variablen eines Dialogfelds in SDI-Fenster anzeigen?

    Hi,

    Ich hab da nochmal ne Frage...

    Ich habe eine SDI-Anwendung. Aus der SDI Anwendung heraus kann man ein Dialogfeld öffnen und darin ein paar Funktionen berechnen.
    Wie kann ich die Variablen aus dem Dialogfeld der view-klasse meiner Anwendung bekanntmachen, damit ich dann die Ergebnisse des Dialogfelds im Hauptfenster anzeigen kann?

    Arno

  • #2
    Hi,
    du kannst ja die Variable der Dialogfeldklasse als Membervariable der View-Klasse deklarieren, und das Dialogfeld aus der View-Klasse heraus erstellen. Dann kannst du auf seine Variablen zugreifen:

    CMyDlg dialog;<br>
    ...<br>
    dialog.DoModal();<br>
    Danach kannst du auf "dialog.myVariable" zugreifen.

    Mfg Georg

    Comment


    • #3
      Danke :-).
      Aber wenn ich später dann in meinem Programm das Dialogfeld von der Symbolleiste aus starte, wird das Hauptfenster nicht aktualisiert und es stehen immer noch die alten Werte vom ersten Aufruf drin.
      Kann mir bitte irgendjemand sagen wie man einem SDI-Fenster befiehlt sich neu zu zeichnen?

      Gruß, Arn

      Comment


      • #4
        Wo stehen denn bei dir die Zahlen im SDI-Fenster? Hast du dort ein Form (also eine Art Dialogfeld) eingebaut? Wenn ja, dann musst du nur die Invalidate() Funktion dieses Form-Objekts aufrufen, dann wird es neu gezeichnet

        Comment


        • #5
          Ich habe eine SDI Anwendung mit der Basisklasse CScrollView erstellt.
          Die Zahlen werden dann mit Hilfe von Format in einen String umgewandelt und via pDC->TextOut direkt in das Hauptfenster geschrieben.
          Ich habe in der Klasse CProgrammView die Membervariable m_dialog mit dem Typ CDialog angelegt. Dann greife ich von CProgrammView auf m_dialog.meineVariablen zu.

          Wo muss ich die Invalidate() Funktion einbauen? (Ich bin leider noch ein ziemlicher vc++ Anfänger :-(

          Comment


          • #6
            Hab das mit dem Invalidate jetzt lösen können.
            Aber es gibt immernoch ein problem :-S.
            Wenn ich im Dialogfeld die Variable dBerechnen ändere, funktioniert alles gut (hab ich mit TRACE überprüft).
            Sobald ich die Variable dann aber von der view-Klasse aus mit m_dialog.dBerechnen ausgeben will, gibt TRACE für den Variablenwert plötzlich wieder 0.0000 aus...
            Hast Du irgendeine Idee was das sein könnte

            Comment


            • #7
              HI,
              könnte es sein, dass du auf auf m_dialog.dBerechnen zugreifst, BEVOR der Dialog gestartet (angezeigt) wird? Die Variable des Dialogfelds existiert ja schon vorher, und mit großer Wahrscheinlichkeit sind die Werte vorher alle mit NULL initialisiert. Oder versuch es mal mit MessageBox, anstatt mit TRACE, daran könnte es auch (wenn auch unwahrscheinich) liegen.

              Mfg Georg

              Comment


              • #8
                Hm...
                Vielleicht bin ich ja irgendwie blind und überseh was ganz einfaches, aber ich kriegs einfach nicht auf die Reihe. Ich hab jetzt mal folgendes probiert:
                Ich hab in die Dialogklasse eine neue Variable m_fertig eingebaut. Wenn man im Dialogfeld auf OK klickt, bekommt die den Wert 1 zugewiesen. Und dann hab ich in der View-Klasse eine If-Verzweigung eingebaut, die den Seiteninhalt nur neuzeichnet wenn m_dialog.m_fertig den Wert 1 hat.
                Aber irgendwie sieht es so aus als ob die view-Klasse es gar nicht mitbekommt wenn ich im Dialogfeld den Wert der Variablen ändere. Deshalb wird auch selbst beim Neuzeichnen immernoch in der view-Klasse 0.000 angezeigt (beziehungsweise die If-Verzweigung nicht ausgeführt). MessageBox und TRACERT bestätigen das eigentlich...
                Könnte das das Problem sein? Und wie kann ich dann die View-Klasse veranlassen die Variablen aus dem Dialogfeld neu einzulesen?

                Gruß, Arn

                Comment


                • #9
                  Ist die Dialogfeld-Variable (m_dialog) eine MemberVariable der View-Klasse? Oder ist dort ein Zeiger darauf? Wenn das Programm keine Betriebsgeheimnisse enthält , kannst du mir den Code ja mal schicken, ich würd ihn mir angucken. E-Mail: [email protected]

                  Mfg Georg

                  Comment

                  Working...
                  X