Bestimmt einfach: Static Text ändern



  • Wie kann ich in dem dialog-feld den StaticText IDC_STATIC1 ändern?
    mit GetDialogItem(IDC_STATIC1)->SetWindowText bekomm ich eine Fehlermeldung!



  • GetDlgItem(IDC_STATIC1)->SetWindowText("Test"); //Musst auch nen String mitgeben
    

    Es heisst nicht GetDialogItem, sondern GetDlgItem 😉

    gruss
    commander

    Hab nur was angepasst

    [ Dieser Beitrag wurde am 20.08.2002 um 10:33 Uhr von C-O-M-M-A-N-D-E-R editiert. ]



  • Das klappt aber nicht, ich bekomm da einen Ausnahmefehler!

    -->>> m_diaProcess.GetDlgItem(IDC_TEXT01)->SetWindowText("Test"); 
    
        if (m_diaProcess.DoModal() == IDOK)
    


  • Hää jetzt kann ich dir nicht mehr folgen 😕

    Du willst doch einfach nur den Text eines Static´s ändern oder??
    Dann nimm doch einfach diesen Code

    GetDlgItem(IDC_STATIC1)->SetWindowText("Test");
    

    Ohne die Variable davor...oder was willst du machen??

    Was für ein Element ist den in dem Fall IDC_TEXT01 ???
    Ist es wirklich nur ein Static Text Feld??

    [ Dieser Beitrag wurde am 20.08.2002 um 10:50 Uhr von C-O-M-M-A-N-D-E-R editiert. ]



  • OK, von weiter vorne: Ich habe einen Dialog, den ich für verschiedene Eingaben benutze. Dieser hat einen StaticText für die erklärung. Und der soll sich je nach Fall ändern.

    Also erstelle ich in meiner Berechnungsklasse eine Instanz der Dialogklasse....

    CSelectProcess m_diaProcess;
    double T;
    
        m_diaProcess.GetDlgItem(IDC_TEXT01)->SetWindowText("Test"); 
    
        if (m_diaProcess.DoModal() == IDOK)
        {
    


  • Also das mit dem Text ok...
    Dann hast du verschiedene Auswahlmöglichkeiten was zu machen richtig?
    Wie wählst du diese aus? Über radio Buttons?

    Wenndu etwas ausgewählt hast, ändere dann doch einfach den text
    also ist die bedingung erfüllt ändere den Text..

    Notfalls schick mir mal das Projekt an parkits@cci.de
    Dort erreicht es mich momentan



  • Viel einfacher.

    Ich rufe den Dialog in verschiedenen funktioen mit DoModal auf. je nach Funktion in der ich gerade bin brauche ich einen Wert X. Also will ich -bevor!- ich die Dialog aufrufe (mit DoModal) den StaticText ändern.



  • Du änderst den Text einer Komponente des Dialogs bevor diese vom Dialog angelegt wird. Mit der DoModal-Anweisung wird dein Dialog ja erst erzeugt. Wenn du den Text ändern willst, dann musst du es vom Dialog aus machen (da modaler Dialog). Am besten du legst dir in deiner Klasse CSelectProcess eine Membervariable an, die den gewünschten Text erhält, und diese liest du vom Dialog aus, und schreibst das Ergebnis beim erstellen des Dialogs in dein Textfeld.



  • Ist der Text dann im neuen Dialog (also in dem der aufreufen wird??)
    dann schreibste den code in OnInitDialog

    Und sonst versteh ich dich auch nicht...
    Du wählst einfahc die Option aus und dann abdafür

    if(select == 1)
    {
        GetDlgItem(IDC_TEXT01)->SetWindowText("option 1");
        dialog.DoModal();
    }
    

    Oder arbeitest mit ner switch anweisung...



  • ich glaube wir reden aneinanger vorbei. Ich versuch noch mal zu erklären:

    function1:
    Cdialog Test;
    Test.GetDlgItem(TEXT01)->Set... = "Test1"
    Test.DoModal();

    function2:
    Cdialog Test;
    Test.GetDlgItem(TEXT01)->Set... = "Test2"
    Test.DoModal();

    ich habe also kein switch und kein If und sonst auch nichts. Der Dialog wird bevor er angezeigt wird, einfach je nach Anforderung verändert.
    WENN ich dem Static ne member-Variable zuweise, dann klappt das auch. Nur mit dem Getdlg... eben nicht!



  • WerWo hat es bereits gesagt.

    Membervar von Typ CString erstellen.

    In deiner Dialogklasse in der OnInitDialog diese Variable mit Setwindowtext in dein static schreiben.

    CSelectProcess m_diaProcess;
    diaProcess.meincstring = "Hier den Text der im Static erscheinen soll";
    diaProcess.DoMOdal();
    


  • Also nur dass ich das verstehe: Ich kann also erst ein Object mit SetWindowText verändern wenn der Dialog tatsächlich aufgebaut ist. Es reicht also nicht eine Instanz?



  • Eben ergäznen damit es dann auch angezeigt wird:

    CSelectProcess m_diaProcess;
    diaProcess.meincstring = "Hier den Text";
    UpdateData(FALSE); //Aktualliesiert den Dialog
    diaProcess.DoMOdal();
    

    so sollte es dann auch gehen



  • Das Control existriert ja auch erst wenn der Dialog aufgebaut ist.



  • ne ich glaub das control befindet sich auf dem hauptdialog, und nicht im neu aufgerufene, sonst ahste natürlich recht..



  • Das Control befindet sich in dem Dialog der mit DoModal aufgerufen wird.
    Noch den Frage: Ab wann kann ich dann auf die Control des Dialogs zugreifen.
    Wann wird die OnInitDialog aufgerufen, bei dem erzeugen der Instanz oder erst bei DoModal()?



  • Erst nach DoModal()



  • Bei erzeugen der Instanz kann man auf die Klasse zugreifen.
    Die Controls sind aber noch nicht erzeugt da ja der Dialog noch nicht angezeigt wird.
    Deshalb geht eine SetWindowsText auch schief


Anmelden zum Antworten