Scrollen (Grundlegende Fragen)
-
Evtl. nimmt das Tab-Control gar keinen Focus an und transferiert den sofort auf das erste Child Control! Geprüft? Für so etwas gibt es Spy++.
Solange WS_EX_CONTROLPARENT für ein Tab Control gesetzt ist, wird es niemals den Focus annemen. IMHO muss auch WS_TABSTOP gesetzt sein.
-
Hi Martin,
das ist aber sehr seltsam, weil WS_TABSTOP ist gesetzt und wenn ich mit der Tab-Taste "durchscrolle" dann bekommt das TabCtrl auch den Fokus und ich kann zwischen den einzelnen Reitern umher schalten.
Danke!
Lg Kerberos
-
Hi,
ich habe jetzt eine neue Vermutung: wenn ich das TabControl den Fokus hat, dann wird immer nach ganz unten gescrollt (bis zum Ende des TabControls).
Ich möchte aber, wenn das Tab-Control den Fokus hat, Ganz nach oben zu den Reitern des Tab-Controls scrollen.
Bekomm das aber nicht ganz hin.
Danke!
Lg Kerberos
-
Dann bauch doch Trace Ausgaben in Dein Programm ein. damit Du eingrenzen kannst wer wann scrolled.
Prüfe doch einfach wer, wann, wie den Focus hat...
Debug Ausgaben sind doch schnell bewerkstelligt.Ich vermute Du hast soviele Stellen in Deiem Programm die scrollen, dass dann einfach Chaos passiert.
-
Hi Martin,
nein, ich habe ein anderes Problem!
Ich habe das Problem dass, wenn mein TabCtrl den Fokus bekommt, an das ende (bottom) meines TabCtrls gescrollt wird.
Das hab ich jetzt gelöst, aber dann hab ich natürlich immer noch das Problem, dass IMMER ein Control selektiert ist und es wird automatisch dort hin gescrollt, sobald das fenster aktiviert wird.
D. h. Wenn ich im Fenster nur nach unten scrolle, aber den fokus nicht verändere, dann zu einem anderen Fenster wechsel und dann wieder mein Fenster aktiviere scrollt der algorithmus wieder an das Control das standardmäßig den Fokus hat.
Obwohl es eigentlich an dieser Position stehen bleiben sollte.
Das Problem ist, soblad ich MyDialog.SetFocus() aufrufe, bekommt automatisch mein CTabCtrl den Fokus (vllt. weil das das erste Element ist das hinzugefügt wird)
Lg Kerberos
-
Ich verstehe es dennoch nicht ganz. Alle Standard-Implementierungen von CDialog und CFormView merken sich das letzte Control, dass den Focus hat uns setzen diesen.
Hast Du hier etwas komplett selbst gebasteltes?Dann ändere doch die Reihenfolge, wenn das eine Lösung ist (SetWindowPos)!
-
Hi Martin!
Ich habe einen nicht modalen CDialog. Mein Dialog merkt sich auch das zuletzt aktive Control.
Das Problem liegt darin, wenn noch kein Control vom Benutzer selektiert wurde. Dann ist irgendwie automatisch mein TabCtrl selektiert.
Scrollt der Benutzer nach unten, aber selektiert dabei kein Control und verlässt das Fenster, dann scrollt der Altorihmus wieder automatisch nach oben sobald das Fenster aktiviert wird.
Danke
Lg Kerberos
-
Wenn OnIniotDialog mit TRUE verlassen wird, dann wird das erste Control mit WS_TABSTOP für den Focus bestimmt.
Setze den Fokus wie Du es möchtest und gib FALSE zurück!
-
Hi Martin,
das löst mein Problem leider auch nicht.
Das Problem ist, wenn ich
1. Ein Control selektiere
2. In einen Bereich Scrolle, in dem das selektierte Control nicht sichtbar ist
3. Das Fenster aktivieredann wird durch den Altorithmus wieder in den Bereich, wo das selektierte Control liegt gescrollt.
Ich denke dass das evtl. mit dieser Abfrage zusammenhängt
m_LastControl = m_CurControl; m_CurControl = GetFocus(); if( m_CurControl!=m_LastControl && NULL!=m_CurControl && IsChild(m_CurControl) ) { ... }Danke!
Lg Kerberos
-
Kann mir denn keiner weiterhelfen?
Grüße Kerberos
-
Debugge... Versuch Breakpoint gut zu setzen. Wer sezt wann welche Handles...
Das ist keine allgemeine Frage, die Du hier zu einem allgemeinen Problem stellst... Wie soll man hier helfen, wnen man nicht mal das genau Umfeld kennt.
Fakt ist: Es gibt Code der scrollt, Du mäöchtest das nicht, OK dann verhindere, dass der Code ausgeführt wird...
Ist doch bereits alles gesagt, oder?
-
Hi,
hab das Problem jetzt gelöst, bin zu lange an diesem scroll-problem gessesen. Nach einer längeren Pause kam die "Erläuchtung".
(...lag übrigens schon an diesem Code, den ich gepostet habe)
Lg Kerberos