SetWindowText



  • hallo,
    möchte in einem STATIC-Textfeld den Pfad angeben, wo ich eine textdatei abspeichere.
    eigentlich ist das ja recht einfach mit SetWindowText.
    bei mir kommt dann jedoch folgender fehler in der winocc.cpp:

    void CWnd::SetWindowText(LPCTSTR lpszString)
    {
    ASSERT(::IsWindow(m_hWnd));
    
    if (m_pCtrlSite == NULL)
    	::SetWindowText(m_hWnd, lpszString);
    else
    	m_pCtrlSite->SetWindowText(lpszString);
    }
    

    so hab ich das gemacht:

    BOOL CTextDateneinfuegen::OnInitDialog() 
    {
    CDialog::OnInitDialog();
    
    bool speichern=FALSE;
    CFileDialog TextdateiSpeichern(speichern,"txt","Barcode",0,"Textdateien(*.txt)|*.*|\0",this);
    if(TextdateiSpeichern.DoModal()==IDCANCEL) OnCancel();
    
    Pfad=TextdateiSpeichern.GetPathName();
    
    CStatic * PfadName;
    PfadName = (CStatic *)GetDlgItem(IDC_STATIC_Zielordner);
    PfadName->SetWindowText(Pfad);
    
    return TRUE;  
    }
    

    kann mir jemand helfen ???
    mfg
    fevernova



  • Hat PfadName einen vernünftigen Wert?



  • CStatic * PfadName;                                         //0xccccccc
    PfadName = (CStatic *)GetDlgItem(IDC_STATIC_Zielordner);    //0x0000000
    PfadName->SetWindowText(Pfad);                              //hier stürzt er ab
    


  • Sicher, dass dein Dialogelement so heisst? Der hat das nicht gefunden.

    Und für's nächste Mal:
    ASSERT(PfadName);

    ist echt praktisch in so einer Situation - macht dich ohne Absturz auf den Fehler aufmerksam.

    CStatic * PfadName;                                        //0xccccccc 
    PfadName = (CStatic *)GetDlgItem(IDC_STATIC_Zielordner);   //0x0000000 
    ASSERT(PfadName);                                          //Meldung
    if (PfadName)                                              //Verhindert Absturz
    {
        PfadName->SetWindowText(Pfad);                         //hier stürzt er ab
    }
    

    So ist man (fast) auf der ganz sicheren Seite.

    Wieso nutzt das hier eigentlich keiner? Ist das so unbekannt? Es wird immer blind auf die gelieferten Zeiger vertraut. Und dann ist das wundern gross, wenn die nicht passen. Oder ist das in dem vielgelobten Buch so beschrieben?



  • geht trotzdem nicht.bringt dann den fehler in der if-schleife.
    😕



  • Da sollte er nicht reingehen.

    Hast du den Namen (IDC_...) überprüft?



  • IDC_STATIC_Zielordner ist im hauptdialog und dort wo ich das dann ausführe (speichern unter...) ist in einem zweiten dialog.
    kann da der fehler liegen ? 😮



  • Jupp, der kennt das Teil gar nicht.



  • habs in OnInitDialog reingeschrieben-geht nicht.
    fehler in ASSERT ! 😞



  • Hatte vor kurzem einen ähnlichen Fehler. Mein Programm ist genau bei der gleichen Stelle ausgestiegen.
    Bei mir lags einfach daran, dass im OnInit-Dialog die angesprochene Kompo noch nicht existiert hat. Habs dann über eine selber definierte PostMessage gelöst. Bis diese Message dann abgearbeitet wurde, war die Kompo erzeugt.

    Phips!



  • was muss ich da machen ??? 🙄



  • Du wirst dort so lange einen Fehler bekommen, wie du diese Zeilen in dem zweiten Dialog hast und das IDC_STATIC_Zielordner im Hauptdialog ist.
    Ein Dialog kennt nur seine eigenen Elemente.

    Ich fürchte, du wirst deinen Lösungsansatz nochmal überdenken müssen.


Log in to reply