Bestimmt einfach: Static Text ä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