Probleme mit OnPaint und CFileDialog



  • Also ich habe einen Button, der hat eine Behandlungsroutine die folgendermaßen aussieht:

    void CLineAnalyzerDlg::OnButtonClickedLeft()
    {
        CFileDialog m_fdLoadFile(true, NULL, NULL, OFN_HIDEREADONLY|OFN_FILEMUSTEXIST, "Text Files (*.txt)|*.txt||", NULL);
        if (m_fdLoadFile.DoModal() == IDOK)
        {
            // OK geklickt...
            m_sFileNameLeft = m_fdLoadFile.GetFileName();
            UpdateData(false);
            setPointer(&m_pLeftFile, ReadFile((LPCTSTR)m_sFileNameLeft));
        }
        else return;
    }
    

    Warum ist der Button - solange das File lädt (kann bei großen Files bis zu 7 Sekunden dauern) - verschwunden? Und wie kann ich dem abhelfen?
    Kann das "Datei lesen" leider nicht aus der if-Schleife rausnehmen, sonst würde er ja auch kesen, wenn ich "Abbrechen" klicke.

    Screenshot



  • Der Button ist bestimmt verschwunden, weil die Anwendung besseres zu tun hat, als sich um ihr Aussehen zu kümmern.
    Vielleicht hilft ja ein
    GetDlgItem(IDC_VON_DEM_BUTTON)->RedrawWindow();
    irgendwo in deiner Behandlungsroutine.



  • Jepp, danke! Schnell und unkompliziert.



  • Mmhh... hier ist jetzt ein Effekt entstanden, den ich nicht deuten kann:

    Wenn ich das Projekt mit Strg+F5 starte, habe ich immer noch ein OnPaint-Problem, wenn ich die Applikation allerding direkt aus dem Release-Ordner starte, ist alles in Ordnung. Wie erklärt sich dieser Effekt? Kann man das abstellen?



  • Wenn du RedrawWindow oder UpdateWindow brauchst hast du eh was falsch gemacht. Das Laden der Dateien gehört in einen neuen Thread.



  • ..... schrieb:

    Wenn du RedrawWindow oder UpdateWindow brauchst hast du eh was falsch gemacht. Das Laden der Dateien gehört in einen neuen Thread.

    Das ist aber heftig, ich muss das Programm in 4 Wochen fertig haben und habe mich noch überhaupt nie (!!!) mit Thread-Programmierung beschäftigt.


Anmelden zum Antworten