SetReadOnly()



  • ich habe das problem schon mal angesprochen.
    ich will ein eingabefeld während des programmablaufs mit SetReadOnly steuern. dazu ist eine membervariable vom typ CEdit notwendig. wenn ich allerdings dann auch noch den text aus dem eingabefeld auslesen möchte, dann benötige ich auch noch eine Membervariable vom typ CString. wie bekomme ich das gebacken?
    irgendwie mach die funktion SetReadOnly gar keinen sinn, wenn ich nicht zumindest wenn SetReadOnly = false ist den Inhalt des Eingabefeldes auslesen kann?

    versteht ihr mich?

    liebe grüße

    andrea



  • nicht direckt aber du kannst dir den text auch ohne eine Membervariable auf CEdit holen indem du wie im anderen thread statt SetDlgItemText GetDlgItemText verwendest.

    CString sEditFeld;
    GetDlgItemText(IDC_EDITFELD,sEditFeld);
    

    😉
    mfg
    LowFly



  • Oder wenn du nen Pointer auf dein Edit Feld haben willst:

    CEdit* pEdit = GetDlgItem(IDC_MYCONTROL);
    if (!pEdit)
        return;
    
    pEdit->SetReadOnly(true);
    


  • ich bekomme das irgendwie nicht gebacken.
    Kann sein, dass ich Probleme bekomme wenn die memebervariablen in unterschiedlichen Klassen liegen.

    ich habe z.b. ein Klasse CKlasse und in dieser die Membervariable um das Eingabefeld zu steuern (CEdit). Dann rufe ich doch das ganze mit

    CKlasse.CEdit.SetReadOnly(true);
    

    auf? Stimmt das?

    sind die IDC´s Klassen zugeordnet?

    GetDlgItemText(IDC_EDITFELD,sEditFeld);
    

    funktioniert bei mir auch nicht. Der string ist leer. Beim kompilieren erscheint keine Fehlermeldung. Was mache ich da falsch?
    kann sein, dass es auch hier probleme gibt wenn der CString in einer anderen Klasse steht als der Aufruf der Funktion?

    Irgendwie bin ich am Ende meiner künste.

    liebe Grüße an Euch

    Andrea



  • versteh ich dich richtig du willst mit

    GetDlgItemText(IDC_EDITFELD,sEditFeld);
    

    den string aus einer anderen klasse holen als du GetDlgItemText aufruft??

    das kann nicht gehn.
    da brauchts du das Handle auf die andere class bzw Dialog

    HWND hWnd;
    GetDlgItem(IDD_DEINDIALOG,&hWnd);
    ::GetDlgItemText(hWnd,IDC_EDITFELD,sEditFeld);
    

    und von einem Dialogfeld das durch ein Dialogfeld aufgerufen wird kannst du keine Funktionen ansprechen egal in welche richtung.

    kuck mal in den thread da kam die gleiche frage schonmal vor
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-155883-and-sid-is-28d9d5c4fbab9f0ee1e292a15b128b55.html

    mfg
    LowFly



  • Hööhm... Wir sind hier in MFC ... da nutze man bitte die CWnd Funktion...


  • Mod

    (D)Evil schrieb:

    Hööhm... Wir sind hier in MFC ... da nutze man bitte die CWnd Funktion...

    Nicht wenn der Zugriff aus einem anderen Thread geschieht... <duck&wech>



  • ?? Was willst du damit sagen Martin?

    <duck&wech>

    Das ist ne gute Entscheidung 😉


  • Mod

    Wenn man einen CWnd Zeiger in einem anderen Thread verwendet dann führt dies in vielen Fällen zu ASSERTs da die Handles in internen threadlokalen Maps gehalten werden.
    Es ist also auch in einem MFC Programm ratsam eher ein Handle an einen anderen Thread weiterzugeben als einen CWn* Zeiger.
    Deshalb mein Kommentar.
    duck&wech: weil man immer noch was findet wo meinen Senf dazugeben kann auch wenn es nicht direkt zum Topic passt.



  • Ja k... aber das war ja wirklich nicht das Topic 😉


Anmelden zum Antworten