3 verschiedene Frames gleichzeitig aktualisieren
-
ja stimmt, ich kann es ja so machen:
CMFCKlasseView *pView1 = new CMFCKlasseView(101); CMFCKlasseView *pView2 = new CMFCKlasseView(110); ... newSplitter->CreateView( 0, 0, pView1->GetRuntimeClass() , CSize(rect.Width()/2, rect.Height()/2), &context ); newSplitter->CreateView( 0, 1, pView2->GetRuntimeClass(), CSize(rect.Width()/2, rect.Height()/2), &context );
und der Viewer wäre dann so:
class CMFCKlasseView : public CView { protected: // Nur aus Serialisierung erstellen DECLARE_DYNCREATE(CMFCKlasseView) public: CMFCKlasseView(int cols); int iCurrentPain; ... } CMFCKlasseView::CMFCKlasseView(int cols){ iCurrentPain = cols; } void CMFCKlasseView::OnDraw(CDC* pDC){ ... if(iCurrentPain == 101) ... else if(iCurrentPain == 110) ... }
habs schnell ausprobiert, aber blöderweise krieg ich dabei nen compiler fehler
MainFrm.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CMFCKlasseView::CMFCKlasseView(void)" (??0CMFCKlasseView@@QAE@XZ)" in Funktion ""protected: void __thiscall CMainFrame::onViewStaticSplitter(void)" (?onViewStaticSplitter@CMainFrame@@IAEXXZ)".
-
der Konstructor is Protected den kannst du nicht überschreiben, aber du kannst durch aus die Variable nach dem erstellen befüllen, das sollte den gleichen effekt haben.
CMFCKlasseView *pView1 = new CMFCKlasseView(); pView1->iCurrentPain = 101; CMFCKlasseView *pView2 = new CMFCKlasseView(); pView2->iCurrentPain = 110;
wobei du auch ganz einfach da mit 1,2,3 und 4 arbeiten kannst solange du weisstwelche Pain gemeint ist. Was auch noch geht und ich meist bei soplchen Sachen benutze ist enum da kannst du anstatt Nummern zu Verwenden direkt namen benutzen für Pain_links_oben, Pain_rechts_oben und so weiter was dann die Lesbarkeit erhöht.
-
genau das habe ich auch bereits probiert.
Ich initialisiere das Klassenobjekt und setze meine Variable auf einen bestimmten Wert.
CMFCKlasseView *pView1 = new CMFCKlasseView(); pView1->iCurrentPain=1; newSplitter->CreateView( 0, 0, pView1->GetRuntimeClass(), CSize(rect.Width()/2, rect.Height()/2), &context );
In der OnDraw habe ich dann:
CString s; s.Format(TEXT(" \n Pain: %d"),iCurrentPain); TRACE0(s); COLORREF qCircleColor; if(iCurrentPain==4){ qCircleColor = RGB(0,255,0); CPen qCirclePen(PS_SOLID, 7, qCircleColor); CPen* pqOrigPen = pDC->SelectObject(&qCirclePen); pDC->Ellipse(200,200,300,300); }
in der Ausgabe habe ich:
Pain: -842150451
Das scheint, aber die Registeradresse zu sein
-
Das kann so nicht gehen. CreateView erzeugt selbst das View Objekt. Das Objekt, dass Du hier erzeugst wird nicht verwendet!
Wo denn auch? Übergibst Du dieses pView Objekt an irgend jemanden?
Wer soll es denn benutzen.
Es ist einfach nur ein Speicherleck.Tipp: Entsprechende Daten sollen nicht im View stehen sondern im Dokument.
Wenn Du an den View ran willst, den CreateView erzeugst musst Du ihn Dir holen mit GetPane.
-
danke dir,
habs dank dir hingekriegt:
CMFCKlasseView *nk; nk = (CMFCKlasseView*)newSplitter->GetPane(0,0); nk->iCurrentPain=1; nk = (CMFCKlasseView*)newSplitter->GetPane(1,0); nk->iCurrentPain=2; nk = (CMFCKlasseView*)newSplitter->GetPane(0,1); nk->iCurrentPain=3; nk = (CMFCKlasseView*)newSplitter->GetPane(1,1); nk->iCurrentPain=4;
-
iCurrentPain
, lol
Das heisst "pane" du Keks.
-
hustbaer schrieb:
iCurrentPain
, lol
Das heisst "pane" du Keks.Woher willst du das wissen vielleicht ist es für ihn doch eher eine Qual und damit besser zu handhaben. Oder willst Du jetzt jemanden vorschreiben wie er seine Variablen benennt?
-
um es mal zu erklären: zuerst dachte ich es soll "Paint" heissen nur waren die MFC Proggies zu faul und haben ein "t" vergessen.
Nachdem ich raus gefunden was Pane heißt, hat es mir nicht sehr gefallen und ich habe mit Pain weiter gemacht
-
CTecS schrieb:
hustbaer schrieb:
iCurrentPain
, lol
Das heisst "pane" du Keks.Woher willst du das wissen
Ich weiss es einfach. Guck dir doch bloss den Code an, ich würde sagen die Bedeutung der Variable ist ziemlich klar.
CTecS schrieb:
Oder willst Du jetzt jemanden vorschreiben wie er seine Variablen benennt?
So lange "jemand" in meiner Firma arbeitet: ganz sicher will ich das!
Soweit kommt's noch dass ich die komischen Namen die manche Leute da meinen verwenden zu müssen unkommentiert stehen lasse.Trifft auf MishaP natürlich nicht zu. Trotzdem darf man wohl noch was sagen. War ja nicht unfreundlich - "du Keks" ist ja keine Beleidigung. Ist bloss kurz für "Scherzkeks".
-
hustbaer schrieb:
War ja nicht unfreundlich - "du Keks" ist ja keine Beleidigung. Ist bloss kurz für "Scherzkeks".
habe ich auch nicht als Beleidigung empfunden