Neues Window in einer Funktion öffnen



  • Hola!

    Ich habe folgendes Problem:

    Innerhalb einer DLL benötige ich zum Anzeigen von Daten, die ich von der seriellen Schnittstelle gelesen habe, ein neues Window. Dazu habe ich eine Klasse übernommen, die von CFrameWnd abgeleitet ist. Im Konstruktor wird ein Zeiger auf ein Array und ein int übergeben.

    CDataWnd::CDataWnd(BYTE * buffer, int length)
    {
        itsLength = length;
        itsBuffer = buffer;
        Create(NULL, "Data", WS_VISIBLE|WS_OVERLAPPEDWINDOW, CRect(0,0,500,500));
        UpdateWindow();
    }
    

    Nun soll das Window innerhalb einer Funktion "Anzeigen" erzeugt werden und dann in der KlassenMethode OnPaint() beschrieben werden.

    void ShowData(BYTE sBuffer[], int iLength, UINT iAdresse)
    
    {
       /* Fenster erzeugen und Daten anzeigen */
       CFlashDataWnd *flashDataWnd = new CFlashDataWnd(sDataBuffer, iLength) ;
    
    }
    
    void CDataWnd::OnPaint()
    {
        ......
    
        for (lPos = 0; lPos < itsLength; lPos++) 
        {
           ...    
        dc.DrawText(sDataline, &rect ,DT_LEFT );
                   ....    
        }
    

    Danach soll die Funktion ShowData ()zurückkehren. Soweit funktioniert's ja, aber sobald ich dann irgendwas im Fenster mache (z.B. mit dem Cursor hineinfahren) bekomme ich eine Access Violation. Es verliert ja irgendwie die Gültigkeit, wenn die Funktion zurückkehrt. Was ich machen will, ist, dass man erst das Fenster schließen muss, damit die Funktion ShowData() zurückkehrt und dann sollte es ja keine Probleme mehr geben. Bzw. gibt es eine möglichkeit, dass das Fenster auch danach noch gültig ist?

    Das Ganze läuft wie gesagt in einer DLL, die wiederum in einem Applikationsprogramm geladen wird, ist also nicht unbedingt einfach zu handlen.

    Danke schon mal im voraus!



  • hast du schon DoModal(); versucht ??

    (hört sich so an als ob du nicht mehr der neuste auf dem gebiet bist, aber ich frage trotzdem mal ;))



  • Ist das nicht nur bei Dialogen notwendig??

    Ja, das ganze ist recht neu für mich!



  • aso, hörtest dich so an, als ob du schon ne zeit lang dabei bist. aber ok.

    du sagtest doch das du ein window anzeigen lassen willst; hast du vor ein im dialogfeldassistenten erstelltes fenster anzeigen zulassen ?? das könntest du dann mit werten füllen.

    wenn du das vor hast, dann machst du in deinem hauptdialogfeld eine variable vom datentyp deines fensters und führst die DoModal() -funktion auf die variable aus


Anmelden zum Antworten