View & Zeiger auf RichEditCtrl



  • So, hat mal wieder nicht lange gedauert, bis ich einem weiteren Mysterium in der unendlich weiten Welt der MFC/WinApi begegnet bin.
    Und zwar geht es darum, dass ich in einer SDI (FrameView) - Anwendung ein RichEditCtrl nutze um mir Daten anzuzeigen. Bei Programmstart speichere ich mir in der View-Datei einen Zeiger in der OnInitialUpdate()-Funktion.

    m_pRichEdit = (CRichEditCtrl*) GetDlgItem(IDC_RICHEDIT);
    

    In meiner Methode 'ReadFile()' nutze ich den Zeiger um die Daten anzuzeigen.
    Bei Programmstart funktioniert das auch noch alles einwandfrei.
    Wenn ich jedoch dann eine neue Datei öffne und das Programm in die ReadFile()-Funktion springt, dann ändert sich unter dem Zeiger das Handle HWND und es gibt nur noch Fehlermeldungen.
    Eine Lösung habe ich, indem ich den Zeiger immer nur in der ReadFile()-Funktion erstelle. Das funktioniert auch problemlos. Jedoch möchte ich gerne verstehen, warum das nicht geht, den Zeiger vorher zu speichern?!
    Schließlich habe ich noch eine dialogfeldbasierende Anwendung, wo ich genau dasselbe mache und es dort keinerlei Probleme gibt.
    Falls sich hier in diesem Forum Scullys und Mulders aufhalten, die solchen Mysterien hinterherjagen und auch der Lösung schon auf die Spur geschlichen sind, dann können diese sich gerne hier melden. Aber nicht mit einem X am Fenster. 😃

    MfG,
    Paul.



  • So, habe zwar immer noch keine Ahnung, wieso das so ist, aber ich habe eine neue Frage, wofür ich nicht unbedingt einen neuen Thread aufmachen möchte:

    Wie finde ich am Besten ein Fenster? FindWindow() ist nicht das Richtige, denn wenn ich in meiner SDI - Anwendung eine Datei öffne, dann ändert sich auch der Name.
    Der Hintergrund: Ich möchte, wenn meine Anwendung minimiert oder verdeckt ist, dass, wenn ein Benutzer nun eine Datei doppelklickt (um sie zu öffnen) nicht eine neue Instanz geöffnet wird, sondern die schon bestehende gezeigt wird.
    bisher mache ich das so:

    CreateMutex(0, FALSE, "MyProgramView");
    if (GetLastError() == ERROR_ALREADY_EXISTS || GetLastError() == ERROR_ACCESS_DENIED) 
    {
        AfxMessageBox("An Instance of this application does already exist.",MB_OK, NULL);
    
    HWND wnd = FindWindow(NULL,"Untitled - MyProgram"); // Das geht ja nicht! :(
    ShowWindow(wnd, SW_RESTORE);
    
    return FALSE;
    }
    

    Jemand eine Idee?



  • Zur 2. Frage:

    http://www.cpp-tutor.de/mfc/mfc/kap3/tut/tut5.htm

    Das is so ziemlich genau das was du suchst.

    Gruß Brainiac


Log in to reply