2017-08-21 1 views
1

Ich habe eine (Diagramm-) Kontrolle mit riesigen Daten (x Kurven a ~ 10'000 Punkte) im Inneren. Ich muss das Steuerelement mit denselben Daten in verschiedenen Ansichten oder Fenstern anzeigen.Mit der gleichen Kontrollinstanz in verschiedenen Ansichten oder Fenstern

Da Geschwindigkeit und Konsistenz wichtig sind (ca 150ms zum Neuzeichnen), habe ich versucht, die gleiche (nur Lese) Steuerinstanz in verschiedenen Ansichten oder Fenstern zu verwenden.

Diese Regelung scheint zu funktionieren:

void CMyview::OnInitialUpdate() 
{ 
    .. 
    if (NULL == m_pCurveTempCtrl) 
    { 
     m_pCurveTempCtrl = new CCurveCtrl; 
     .. 
    } 

void COtherView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) 
{ 
     CWnd* m_pCurveCtrl = Pointer to CMyView::m_pCurveCtrl; 

     if (bActivate) 
      m_pCurveCtrl->SetParent(pActivateView); 
     else 
      m_pCurveCtrl->SetParent(pDeactiveView); 

     CFormViewEx::OnActivateView(bActivate, pActivateView, pDeactiveView); 
} 

Aber ist das erlaubt?

Antwort

1

Nein. Was passiert, wenn beide Ansichten angezeigt werden müssen? Nur einer wird ein Fenster haben ...

Die Doc View-Architektur ist dafür ideal.

Behalten Sie die Daten im Dokument bei und verwenden Sie verschiedene Ansichten, die denselben Datenpool aus dem Dokument verwenden.

+0

Ja, es ist eine Doc View-Architektur. Der Datenpool in Doc ist jedoch nicht mit dem Datenpool Control kompatibel. (Std :: Vektor vs CArray). –

+0

:) ändern Sie es ... Oder besser bauen Sie eine universelle const Accessor-Funktion in das Doc für das Array. Keine Notwendigkeit, die Daten zu kopieren. – xMRi

+0

Wenn das Kopieren von Daten langsam ist. Tu es nicht. Nähte, dass dies ein XY-Problem ist ...;) – xMRi

Verwandte Themen