Invalidate wohin wenn Fenster nach Focusverlust nicht neu zeichnet?
-
Warum Invalidate nicht geht weiß ich nicht. Leider
probiert hab ich es so:void CMainFrame::OnSetFocus(CWnd* pOldWnd) { CFrameWnd::OnSetFocus(pOldWnd); Invalidate(TRUE); //und so hab ich auch probiert // CDokumenteView DokuView; // DokuView.Invalidate(TRUE); }
Aber das Pdf ist trotzdem wenn ich den Focus wieder bekomme eine einfache weiße Fläche (weiß ist mein Programmhintergrund) das normale Programmmenü ist da, aber das PDF-Menü ist auch weg! (und bleibt es). An die Stelle komm ich auf jeden Fall wieder also MessageBoxen haben gezeigt die WM_SETFOCUS scheint schon richtig zu sein. Das mit dem oben auf der Seite sein ist echt doof, aber nicht so schlimm wie wenn ich mein Dokument nicht mehr bekomm!
Wie kann ich die ActiveView mit der gewünschten View vergleichen? (in ner if)???
Danke schon mal ganz herzlichst
-
// CDokumenteView DokuView; // DokuView.Invalidate(TRUE);
Wieviele Diskussionen hatten wir beide zu DEM Fehler?
Wie kann ich die ActiveView mit der gewünschten View vergleichen? (in ner if)???
Wie wäre es damit, dass du dynamic_cast nutzt? Wenns der falsche ist, kommt NULL raus.
-
estartu_de schrieb:
// CDokumenteView DokuView; // DokuView.Invalidate(TRUE);
Wieviele Diskussionen hatten wir beide zu DEM Fehler?
[/quote]
Hm schon aber dieser Fehler steckt sehr tief in mir, als ich das Assert gesehen hab war mir gleich alles klaraber halt erst da
wollte es aber der Vollständigkeit halber auch posten, damit du weißt, mit was für nem Trottel du es zu tun hast
estartu_de schrieb:
[Wie wäre es damit, dass du dynamic_cast nutzt? Wenns der falsche ist, kommt NULL raus.
Hm so??
CDokumenteView* DokuView = dynamic_cast<CDokumenteView*>(AfxGetMainWnd()); if (DokuView) Invalidate(TRUE);
geht auch nicht Fehlerbeschreibung s.o.
was ist daran falsch??
-
Hmmm, was gibt dir AfxGetMainWnd()?
Jedenfalls keinen View - aber was, was dir GetActiveView anbietet.
-
Hm OK, dann hätte ich jetzt vermutet:
CDokumenteView* DokuView = dynamic_cast<CDokumenteView*>(AfxGetMainWnd()); if (DokuView==GetActiveView()) Invalidate(TRUE);
Aber es ist immer noch das gleiche Problem weil er mir gar nicht in die if rein kommt!
Krieg ich noch einen Tip? *liebschau*
-
ich würde lieber versuchen den fehler zu finden als irgendwelche komischen workarounds zu benutzen.
-
na Danke für den Prima Tip! Wenn ich den Fehler innerhalb 3 Werktage finden würde, würde ich das ja machen, außerdem ist es kein workaround, wenn ich das neuzeichnen in der SetFocus mache!!
Es ist ja wohl definitiv konstruktive Fehlerbeseitigung!
-
Meinst du diese Situation wie auf folgendem Screenshot?
-
CDokumenteView* DokuView = dynamic_cast<CDokumenteView*>(AfxGetMainWnd()->GetActiveView());
So sollte es gehen, ist aber nicht getestet...
-
Also ich hab auch mal Screenshots gemacht:
Bild 1: so sollte es immer sein!
Bild 2: Fenster drüber auch noch OK
Bild 3: Fenster weg scheiße Loch!
Bild 4: wenn ich maximiertes Fenster drüber liegen hatte
Bild 5: wenn ich mit der Maus übers PDF Menü geh tauchen die einzelnen Buttons wieder aufsieht doch scheiße aus oder??
@Estaru hm leider Fehler:
error C2039: 'GetActiveView' : is not a member of 'CWnd'
-
Dann musste einfach noch nen Mainframe draus machen:
CDokumenteView* DokuView = dynamic_cast<CDokumenteView*>(((CMainFrame*)AfxGetMainWnd())->GetActiveView());
-
Also das sieht ja aus wie auf meinem Screenshot.
Aber bei mir ist das Problem nicht. Lass dir doch ne minimale CHTMLView Anwendung vom Assistenten erstellen und lad da dein PDF rein. (so hab ich es gemacht)
-
Tut mir leid hatte Donnerstag und Freitag frei
öhm @Estartu er scheint jetzt neu zu zeichnen, aber selbst wenn ich ein kleines Fenster drüber lege verschwindet jetzt der komplette Screen wie auf Bild 4 (s.o.)
@pdf: das mach ich eigentlich! Zeig mal bitte wie du das da rein lädst. Auch mit navigate2 ??
Vielen Dank schon mal euch beiden
-
Also vom Assistenten wird ja alles schon komplett fertiggstellt. Hab nur die URL bei Navigate auf ein PDF Dokument geändert.
-
@pdf: kannste mir die Klasse mal posten? dürfte ja nicht all zu groß sein!
@Estartu: noch ne Idee? Was könnte denn sonst noch sein?
-
Nein, ich habe keine Idee mehr.
Die ganze Zeichnerei ist ja eh nicht so mein Gebiet.Was du nochmal versuchen könntest, ist ein UpdateAllViews von dem passenden Doc aufzurufen.
Wie das mit dem Casten geht, müsstest du ja beim View abgucken können.
-
naja aber ein Update all Views glaube ich nicht dass es mich weiter bringt, aber ich werde mal ein wenig damit rum spielen, vielleicht ergibt sich hja noch was, falls jemand noch ne Idee hat ich bin für alles offen!!