Update eines Views aus einer statischen Funktion.
-
Hallo,
ich habe folgendes Problem.ich habe eine Programm (mdi, Doc/View). Dieses Programm greift Daten von einer Schnittstelle ab, sobald welche anliegen. Dies geschieht über eine Callback-Funktion, die statisch ist. Innerhalb dieser Funktion werden die daten übernommen und dann sollen sie dargestellt werden.
Da es sich um eine statische Funktion hanelt, hat sie auch keine Instanz und ich kann deshalb auch kein UpdateViews aufrufen. Die Frage ist nun, wie ich trotzdem ein Update eines Views auslösen kann.
Eine CDataView Instanz zu erzeugen würde hier doch die Doc/View sache aushebeln.zur Veranschaulichung hier mal meine Versuche.
Vielleicht hat ja jemand von Euch eine Idee.
Gruß Jowervoid CDataDoc::OnDataReceived(CData *response, void *closure){ CDataDoc *doc = (CDataDoc *) closure; **daten übernehmen** doc->SetModifiedFlag(TRUE); doc->UpdateAllViews(NULL); //<-- das funktioniert nicht, Absturz, da keine Instanz /*CView *pChildView = ((CMDIFrameWnd*)(AfxGetApp()->m_pMainWnd))->MDIGetActive()->GetActiveView(); if (pChildView) pChildView->Invalidate();*/ //<-- funktioniert auch nicht. }
-
Hi jower,
wie geht's ? :-))
Ich habe keine Moeglichkeit es versuchen, aber du kannst:1. ((CMainFrame*)AfxGetMainWnd())->MDIGetActive()->GetActiveDocument ()->UpdateAllViews ();
2. if (pChildView) pChildView->UpdateWindow ();
3. if (pChildView) pChildView->RedrawWindow ();
Das ist alles. Fredy
-
Danke, funktioniert leider aber auch nicht.
ich komme damit zu folgender Funktion und dann ist schluß.
CView* CFrameWnd::GetActiveView() const { ASSERT(m_pViewActive == NULL || m_pViewActive->IsKindOf(RUNTIME_CLASS(CView))); <-- hier Absturz return m_pViewActive; }
habe mittlerweile versucht, den View über eine Membervariable auf den View (m_pView) mit in der statischen Funktion zur Verfügung zu haben. klappt auch nicht, mal abgesehen, dass das nicht im Sinne der Doc/View-Erfinder wäre.:)
Ich glaube, dass das Problem darin besteht, dass ich keine View Instanz habe. Die Funbktion OnDataRecieved ist "static" hat jemand eine Idee.
-
Hast du wenigstens ein this?
Dann schick ne Nachricht (selbsterfunden) an "dich selbst" und im Handler sollte dann wieder alles klappen.
-
bin mir ziemlich sicher, dass es sich dabei mehr um einen Mäßigen Workaround handelt, aber ich habe das ganze jetzt gelöst durch die Membervariable der ich ausserhalb der Funktion OnDataReceived den View zuweise und den View damit in die static Funktion OnDataReceived reinschleife.
ein Update löse ich durch RedrawWindow aus, Danke Freddy.
doc->m_pview->RedrawWindow();
Vielleicht hat ja jemand von Euch eine Idee, wie man so was geschickt machen kann, ohne das Doc/View-Framework zu untergraben. Würde mich sehr interessieren.
gruß Jower
-
@ estart_du
habe leider kein this. ist halt static die Funktion OnDataReceived.