CHeaderCtrl + Fenster + scrollen
-
Hallo!
Ich bin dabei ein eigenes ReportView Control zu erstellen. Dafür nutze ich als Membervariable in der ReportView Klasse - abgeleitet von CWnd - ein CHeaderCtrl.
Nun möchte ich beim Resize der Header Columns - wie es üblich ist - falls diese über die Fenstergröße gehen die horizontale Scrollbar anzeigen. Jedoch klappt das alles nicht wie ich möchte. Ich habe nämlich keine Ahnung von Fensterscrollerei, daher nutze ich auch vorerst diese ScrollHelper Klasse von CodeProject. Hat jemand damit Erfahrung oder/und weiß wie es geht?
-
Raff ich nicht! Das CListCtrl hat doch selbst ein Header Control, da benötigst Du doch gar kein eigenes.
-
Martin Richter schrieb:
Raff ich nicht! Das CListCtrl hat doch selbst ein Header Control, da benötigst Du doch gar kein eigenes.
Sorry, etwas verquer ausgedrückt.
Ich schreibe ein eigene Control.class ReportView : public CWnd { protected: CHeaderCtrl m_HeaderControl; public: // Code... }Dieses Control sieht später ähnlich aus wie ein CListCtrl im LVS_REPORT Mode. Hat also nichts mit einem List Control zu tun, bis auf die Header. Und hier habe ich nun das Scrollbar Problem. Ich dachte mir auf das HDN_ITEMCHANGED Event zu reagieren. Weiß aber nicht was ich dann tun soll.
-
Und wie steuerst Du aktuell die Scrollbars? Du verwendest hoffentlich die internen!
-
Martin Richter schrieb:
Und wie steuerst Du aktuell die Scrollbars?
Wie gesagt mit der ScrollHelper Klasse. Dort gibt es die Methode SetDisplaySize(..)
Martin Richter schrieb:
Du verwendest hoffentlich die internen!
Ja, ReportView wird mit WS_HSCROLL | WS_VSCROLL erstellt.
-
Und?
-
Martin Richter schrieb:
Und?
Hmm, du machst es mir nicht gerade leicht.

Ich weiß nicht wie ich die ggf. neue Fenstergröße anpasse.
-
Wie ich die Funktion verstehe gibst Du mit SetDisplaySize an wie groß der zu rollende Bereich (Anzeigebereich) sein soll. Scrollbars werden dann automatisch angezeigt, wenn Anzeigebereich>Clientarea!
CScrollView bietet das auch.
-
Ja, nur wie kann ich korrekt scrollen. Wenn ich zum Beispiel die Breite aller Columns addiere erhalte ich ja die Größe, die das Control haben muss. Wenn ich diese mit SetDisplaySize angebe kommen auch Scrollbars nur wird der rechte Bereich des Header beim Scrollen nicht mehr korrekt gezeichnet. Der Linke schon. Ich habe allerdings überhaupt keine Ahnung was ich überhaupt tun muss.
-
Nun ich weißt nicht genau wie diese Basisklasse funktioniert, aber evtl. musst Du entsprechendem dem gerollten Bereich nach rects auch das Header Control nach links verschieben...
-
Habe es jetzt für das erste hinbekommen. Wird sich noch zeigen, ob ich denn *jetzt* alles korrekt bedacht habe.