assertion failure durch CButton in OnDraw
-
danke erstmal, das ergibt einen sinn.
jedoch will ich meinen schalter in meiner xxxView.cpp datei erstellen und dort gibt es ja keine OnInitDialog Funktion, oder kann ich den Code dort noch woanders einfügen ?
-
Nimm OnInitialUpdate, das ist das Äquivalent.
-
Milchmann schrieb:
danke erstmal, das ergibt einen sinn.
jedoch will ich meinen schalter in meiner xxxView.cpp datei erstellen und dort gibt es ja keine OnInitDialog Funktion, oder kann ich den Code dort noch woanders einfügen ?
CView hat dafür die Methode OnInitialUpdate()
MSDN schrieb:
Override this function to perform any one-time initialization that requires information about the document.
-
danke danke!
ich kapiers und es geht
jetzt hab ich nurmehr ein problem
wenn ich meinen Button drücke verändert sich ein viereck, dass ich bereits programmiert habe. die Doc/View architektur hab ich bereits begriffen und ich habe alle variable in der Doc deklariert und zeichnen tu ich ausschließlich in der View. Jedoch bei betätigen des Buttons ändern sich zwar alle werte jedoch kapiert das programm dies erst wenn ich z.B. die fenstergröße verändere oder das fenster minimiere. d.h. ich schaff es nicht, dass sich das fenster automatisch bei button druck aktualisiert.
irgendwelche vorschläge?
-
Versuch's mal mit Invalidate().
-
auf den befehl bin ich bereits gestoßen aber konnte ihn nicht sinnvoll anwenden. in der OnDraw funktion aktualisiert sich dann das programm alle paar milisekunden das es furchtbar lagt. in OnInitialUpdate passiert nichts. den OnClicked befehl für den schalter habe ich in der Doc und dort wird Invalidate nicht erkannt.
-
Invalidate() ist eine Methode der View und wird immer dann aufgerufen, wenn du der Meinung bist, daß etwas neu gezeichnet werden muß (deshalb ist OnInitialUpdate zu früh und OnDraw zu häufig). Vom Document aus mußt du dir erstmal das View besorgen, um es dann zu invalidieren:
void CMyDoc::OnButton() { ... AfxGetMainWnd()->GetActiveView()->Invalidate(); }
-
ich krieg das einfach nicht hin. hab versucht den code einzubinden und kommt immer diese fehlermeldung:
error C2039: 'GetActiveView' : is not a member of 'CWnd'
oder wenn ichs anders versuch:
error C2440: 'type cast' : cannot convert from 'void' to 'CbarsDoc *'
oder solches zeug. blick da einfach nicht durch
-
Probiers so:
[cpp]void CMyDoc::OnButton() { ... static_cast<CFrameWnd*>(AfxGetMainWnd())->GetActiveView()->Invalidate(); } [/cpp]
Das müsste klappen
-
danke danke danke !!
geht alles einwandfrei
wäre nie alleine draufgekommen, muss noch viel lernen