Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » OnPaint im ersten Dialog aktualisieren?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.10.2004, 16:03 Uhr
Larrelt



Moin Moin,
folgendes Problem versuche ich grade zu beheben: Ich habe eine MFC-Anwendung mit Anwendungstyp: Mehrfaches Dokument. Im ersten (haupt) Dialog wird ein weiterer Dialog (dateneingabe) aufgerufen, in dem man in einem Cedit mehrere Zahlen eingeben kann. Diese Zahlen werden für verschiedene Statistik-algorithmen missbraucht (Mittelwert,Median, Varianz...) und die Ergebnisse werden im 1. Dialog im Cedit ausgegeben. Jetzt habe ich vor die Daten noch in ein Koordinatensystem ausgeben zu lassen, welches im 1. Dialog erscheinen soll.
In der OnPaint() methode habe ich schonmal die Achsen zeichnen lassen, jetzt versuche ich erstmal eine Skalierung auf der x-achse zu erstellen:

Code:
for(int skala = 0; skala < iAnzahl; skala += 20)
    {
        dc.MoveTo(skala, -22);
        dc.LineTo(skala, -18);    
    }
    //ende Koordinatensystem
    }


iAnzahl bekommt im 2. Dialog die Anzahl der eingebenen Werte zugewiesen. Wie kriege ich es jetzt hin das die Skalierung gezeichnet wird, nachdem im 2. Dialog Werte eingeben werden?
Also wie kann ich die OnPaint methode aktualisieren, nachdem im 2. Dialog Daten eingegeben worden sind?

Danke im Vorraus!

Ps: Ne Threadvorschau wäre nett
--
08/15
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.10.2004, 16:59 Uhr
~mike
Gast


Hi!
Normalerweise müsste ein Aufruf von Ivalidate über die Dialog Instanz reichen. Sonst mit SendMessage WM_PAINT schicken.

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.10.2004, 18:41 Uhr
Larrelt



Erstmal vielen Dank!
Habe grade die MSDN durchforscht, leider komm ich nicht weiter. Wenn ich das richtig verstehe sendet WM_PAINT aus dem 2. Dialog an den Hauptdialog das er neu zeichnen soll mit der veränderten Variable?
--
08/15
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.10.2004, 20:57 Uhr
~Larrelt
Gast


Moin und erstmal vielen Dank!
Das zeichnen bekomm ich hin, jedoch übergibt er einen Array nicht

Code vom Hauptdialog:

C++:
void CBio070904Dlg::OnPaint()
{
    if (IsIconic())
    {
          Blah blah
        }
    else
    {
        Blah ein wenig statisches Zeichnen...
        //wichtig, holen des arrays!
        char *szGraph = new char[MAXEINGABE];
        CMsgDlg *objDaten = new CMsgDlg();
        szGraph = objDaten->szDaten;
        //Jetzt sollen die werte eingezeichnet werden, jedoch bleiben sie auf gleicher                    
                //höhe
        for(int lala = 0; lala < iAnzahl; lala++)
        {
            int i = 0;
                int iB = 10;
            dc.MoveTo(-190+iB*i, szGraph[i]);
            dc.LineTo(-190+iB*i, szGraph[i]+5);    
                    i++;            
        }
        CDialog::OnPaint();
    }


Code von der Klasse aus welcher das Array geholt werden soll:

C++:
void CMsgDlg::OnBnClickedButtonstart()
    {
        CEdit *objEingabe1 = (CEdit *) GetDlgItem(IDC_EINGABEFELD);
                //Inhalt vom Cedit wird übergeben
        float *fDaten= new float [MAXEINGABE];
        float *fDaten2 =new float [MAXEINGABE];
        //Wenn Objekte leer dann zurück
        if(fDaten == NULL) return;
        if(szTmp==NULL) return;
        if(objEingabe1 != NULL)
        objEingabe1->GetWindowText(szDaten,MAXEINGABE);/
        int iN = 0;
        unsigned int uiDatenCounter=0;
        unsigned long int ulAdressShift = (unsigned long int) szDaten;
        //starte auszählen.
        for (;;)
            {
            szTmp[iN]= *szDaten;
            iN ++;
            szDaten++;
                   if(szTmp[iN-1]== '\0')   // Das letzte Zeichen: Es geht an's ENDE !
                {
                if(strlen(szTmp) != 0) // länge vom String
                {
                    fDaten[uiDatenCounter] = atof(szTmp);  // Fließkommzahl
                    uiDatenCounter++;
                }
                break;
                }
                if(szTmp[iN-1]== 10)   //10 checken und 13 "löschen"
                {
                if(szTmp[iN-2]== 13)
                {
                    szTmp[iN-2]='\0';  
                    fDaten[uiDatenCounter] = atof(szTmp);  //Fliesskommazahl
                    uiDatenCounter++;
                    iN  = 0;
                }
                }
            }



Wenn ich im Hauptdialog szGraph = objDaten->szDaten; dann zeichnet er nur die erste Linie.
Wenn ich jedoch szGraph = objDaten->szFDaten; mach, schmiert er beim Programm ab macht jedoch keine Compilerfehler. Ich bin total verwirrt und weiss nicht mehr weiter. Auf was soll ich jetzt zeigen, warum geht es nicht?

Viele Grüße eure Ronnie

Bearbeitung:
cpp tags

Dieser Post wurde am 27.10.2004 um 21:13 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.10.2004, 21:15 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Was sagt der Debugger? Kannst du den Fehler etwas eingrenzen?
Deine Fehlerbeschreibung ist für mich einwenig widersprüchlich

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.10.2004, 21:48 Uhr
~Larret
Gast


Servus,

Unbehandelte Ausnahme bei 0x0041424f in Bio070904.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xcdcdcdcd.

Wenn ich dann unterbreche zeigt er mir einen Fehler hier an:

dc.MoveTo(-190+iB*i, szGraph[i]);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.10.2004, 22:21 Uhr
mike
Pinguinhüpfer
(Operator)


Öhm. Ist i zu diesem Zeitpunkt ein gültiger index? Füg mal folgendes vor der Zeile ein
TRACE("MYDEBUG: %d %d",sizeof(szGraph) / sizeof(char), i);
Dann sollte im debugfenster eine Meldung MYDEBUG: X X erscheinen. Die mal posten

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: