Zugriff auf View von Doc aus. UpdateallViews verursacht Absturz.

jower

Mitglied
Zugriff auf View von Doc aus. Aus statischer Funktion Update des Views auslösen.

Hallo,
ich habe ein Problem, mit dem ich mich jetzt schon ein wenig rumquäle, da ich mich im Kreis zu drehen scheine.

ich habe ein Programm, dass Daten von einer seriellen schnittstelle abfragt (MDI - doc/view). Die empfangenen Daten sollen in einem fenster dargestellt werden.
ich kann das fenster öffnen und auch was testweise über openGL reinmalen und auch das Empfangen der Daten funktioniert reibungslos. Die Funktion zum Reinmalen wird von der View klasse aus aufgerufen.
Das Problem besteht nun darin, dass ich warten muß bis die Daten angekommen sind und erst dann ein Neuzeichnen des Views veranlassen kann. Wenn ich innerhalb der Funktion DoDataRecieved UpdateallViews aufrufe stürzt das Programm ab.

Ich bin schon soweit, dass noch gar kein Fenster erzeugt wurde, dass geupdated werden kann. Oder ist es einfach nur nicht "active". Ich weiß es nicht.
ich hoffe jemand kann mir helfen, da ich nicht mehr weiterkomme.
Wie kann ich denn genau auf den zum Doc zugehörigen View zugreifen und welche Randbedingungen müssen erfüllt sein, damit man einen View updaten kann?

Danke Jower
 
Zuletzt bearbeitet:
Zugriff auf View von Doc aus. Aus statischer Funktion Update des Views auslösen.

okay, schien wohl nicht ganz klar zu sein, wo das Problem liegt.

ich probier´s einfach nochmal:
ich habe eine statische Funktion, die über eine Callback aufgerufen wird, wenn Daten an der Schnittstelle anliegen. diese Funkition übernimmt die Daten und soll dann den View dazu ermutigen sich zu updaten.
Code:
void CDataDoc::OnDataReceived(CData *response, void *closure){
   CDataDoc *doc = (CDataDoc *) closure;
   **daten übernahmen**
  doc->SetModifiedFlag(TRUE);
  doc->UpdateAllViews(NULL);
  /*CView *pChildView = ((CMDIFrameWnd*)(AfxGetApp()->m_pMainWnd))->MDIGetActive()->GetActiveView();
   if (pChildView)
	pChildView->Invalidate();*/
}

Wie kann ich denn jetzt ein Viewupdate auslösen. bei UpdateAllViews(NULL); stürzt das Programm ab, da es wohl noch gar kein View hat. (vielleicht, weil´s eine statische Funktion ist und damit auch keine Instanz)
Wenn ich UpdateAllViews(NULL); weglassen und das Fenster durch Bewegen/Verschieben zum Update bewege, funktioniert alles, aber warum?

Vielleicht hat einer eine Tipp.
 
Zuletzt bearbeitet:
Zurück