UpdateData Problem



  • Also ich habe ein problem und zwar will ich in dieser funktion ein UpdateData drin haben:

    void PrintCPS(LPCSTR Tag, float& CPS)
    {
    
    	clientclass dlg;
    	wsprintf(szTemp,"%sCPS %12.02f  KPS: %8.02f  MPS: %4.02f    ", Tag, CPS,
    		CPS / 1024, (CPS / 1024) / 1024);
    	dlg.m_Message = szTemp;
    
             //Hier soll UpdateData stehen          
    
             while (PeekMessage(&msg,m_hWnd,0,0,PM_REMOVE))
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    
    }
    

    Da dies ein Update innerhalb einer funktion ist steht dort
    undeclared identifier als fehlermeldung
    Meine frage ist was muss machen damit sich das updatedata auf den Dialog bezieht spricht das halt die werte in den feldern aktualisiert werden ?!?

    Danke schonma im Voraus 🙂



  • dlg.UpdateData() müßte funktionieren.



  • ne leider nicht denn, dann stürzt das proggy ab...und zeigt irgendwelche fehlermeldung vom system !! 😞



  • Warum brauchst Du "UpdateData()".
    kopiere doch einfach "szTmp" in "dlg.m_Message".

    lstrcpy(dlg.m_Message,szTmp);
    


  • Aber letztendlich müssen doch die werte in den entsprechenden Textfelder angezeigt werden...dafür kenne ich nichts anderes als den befehl
    UpdateData() ...



  • SetWindowText() oder SetDlgItemText()



  • probier ich gleich ma aus .... danke schonma !

    Leider weiß ich nicht ganz genau wie ich den einstetzen muss 😕 ?!?



  • RR schrieb:

    Warum brauchst Du "UpdateData()".
    kopiere doch einfach "szTmp" in "dlg.m_Message".

    lstrcpy(dlg.m_Message,szTmp);
    

    Hier habe ich Müll geschrieben, da "dlg.m_Message" ein "CString"-Object ist 😮



  • Naja...kann man ja nicht wirklich sofort auf anhieb sehen..
    also falls jetzt jemand ne lösung hat wäre echt froh falls jemand mir die verraten könnte ! 👍



  • Btw, bevor du irgendwelche Daten updaten kannst, mußt du den Dialog erstmal anstarten (entweder per doModal() oder per Create(), je nachdem ob du einen modalen oder nichtmodalen Dialog brauchst.



  • Die Funktion "SetWindowText" oder "SetDlgItemText" sind aber richtig.
    Du brauchst nur die ID der entsprechenden Textelemente, die Du aus der Ressourcendatei bekommst, dann schreibst Du z.B.:

    dlg.SetDlgItemText(IDC_MYRESID,dlg.m_Message);
    


  • also der dialog wird schon früher aufgerufen mit DoModal() und die funktion mit der ich probleme habe wird über eine andere funktion, die ich über einen button aufrufen...mehrmals aufgerufen um die Werte die angezeigt werden sollen zu aktualisieren

    und joah ich brauche jetzt irgendein update und dann versuche ich das einfach mal mit

    dlg.SetDlgItemText(IDC_MYRESID,dlg.m_Message);
    

    Vllt. ist das ja jetzt ein bisschen verständlicher !!



  • Ellinas schrieb:

    Also ich habe ein problem und zwar will ich in dieser funktion ein UpdateData drin haben:

    void PrintCPS(LPCSTR Tag, float& CPS)
    {
      clientclass dlg;
      wsprintf(szTemp,"%sCPS %12.02f  KPS: %8.02f  MPS: %4.02f    ", Tag, CPS, CPS / 1024, (CPS / 1024) / 1024);
      dlg.m_Message = szTemp;
    
      //Hier soll UpdateData stehen          
      ...
    }
    

    Dir ist klar, daß du hier eine lokale Variable namens 'dlg' hast? Und die wurde (wenn sich dahinter überhaupt ein Dialog versteckt) nicht per DoModal() gestartet.



  • Wenn der Code-Schnippsel der ganze Code ist, dann hat "CStoll (off)" recht.



  • sorry jetzt weiß ich wirklich nicht was du meinst 😕

    also falls du denkst das das der gesamte quelltext ist liegst du falsch...ich habe lediglich die klasse eine variable zugewiesen...und joah ich weiß nicht vllt. hast du ja mein post der davor kam nicht gelesen....!!!

    Aufjedenfall denke ich das ich vor dem name der Funktion die Classenbezeichnung reinbringen muss...muss mich nur noch schlau machen wie !!!



  • Der Dialog muß aber mit dlg.DoModal() angezeigt werden. Diese Code-Zeile ist nicht im Code-Schnippsel vorhanden, ist sie im Original-Code vorhanden?



  • OK, dann nochmal langsam: Du hast eine Dialog-Klasse (nennen wir sie mal CMyDlg) und ein Objekt CMyDlg dlg, richtig?
    Dieses Objekt wurde per dlg.DoModal() gestartet und ruft jetzt aus einer Methode OnButton1() die globale Funktion PrintCPS() auf, immer noch richtig?

    Jetzt kommt das Verständnisproblem: PrintCPS() hat keinen Zugriff auf die Variablen einer anderen Funktion, also kennt sie pauschal das obige Objekt 'dlg' überhaupt nicht. Aber PrintCPS() hat eine lokale Variable namens dlg, die außer dem Namen überhapt nicht mit deinem Dialog zu tun hat - und an diese Variable werden alle deine Aufrufe wie dlg.UpdateData() oder dlg.SetItemText() geschickt.



  • Also gut ich habe es versucht zu verhindern aber ich komm nicht einfach drüber weg :
    also es beginnt mit einem Willkommensdialog...ganz am anfang !!!

    So in dieser klasse (vom willkommensbildschirm) gibt es ein button mit folgender funktion !:

    void CWillkommenclassDlg::OnButtonclient() 
    {
    	// TODO: Add your control notification handler code here
    	clientclass dlg;
    	dlg.DoModal();
    
    }
    

    Dann kommt ein neuer Dialog...auf diesem Dialog gibt es ein button bei betätigung des buttons...wird eine funktion aufgerufen....diese funktion läuft bis zu einem bestimmt prozess...und während diesem prozess ruft er öfters diese funktion auf !!:

    void PrintCPS(LPCSTR Tag, float& CPS)
    {
    
    	clientclass dlg;
    	wsprintf(szTemp,"%sCPS %12.02f  KPS: %8.02f  MPS: %4.02f    ", Tag, CPS,
    		CPS / 1024, (CPS / 1024) / 1024);
    	dlg.m_Message = szTemp;
    
             //fehlt IRGENDEIN Update
             while (PeekMessage(&msg,m_hWnd,0,0,PM_REMOVE))
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    
    }
    


  • Noch ein letztes Mal: Du hast hier ZWEI verschiedene Objekte mit dem Namen 'dlg' - das erste wurde in der Methode CWillkomensdialog::OnButtonclient() angelegt und ordnungsgemäß gestartet, das zweite wird in der Funktion PrintCPS() angelegt und nicht initialisiert.

    Du müsstest deiner Funktion einen Pointer oder eine Referenz auf den aktiven Dialog mitgeben, damit du dorthin etwas zurückgeben kannst:

    void PrintCPS(clientclass& dlg,LPCSTR Tag,float CPS)
    {
      //hier KEIN lokales clientclass-Objekt
      dlg.m_Message=Tag;
      dld.UpdateData();
    }
    
    void clientclass::OnButton1()
    {
      PrintCPS(&this,"Dies ist eine Test",0.1);
    }
    

    (oder du packst die Funktion IN deine clientclass)



  • also die funktion ist IN meiner Clientclass...
    und joah die buttonfunktion OnButtonClient...ist in einer anderen klasse


Anmelden zum Antworten