(Eher) allgemeine Frage zur Erstellung eigener Klassen



  • Hallo Zusammen,

    ich wollte in meinem Projekt den Header meines CListCtrl etwas umgestalten und habe dazu eine Klasse von CHeaderCtrl abgeleitet:

    class  CHeaderCustom : public  CHeaderCtrl
    {
    public:
    	CHeaderCustom();
    	afx_msg void OnPaint();
    	DECLARE_MESSAGE_MAP()
    };
    

    Mittels Create habe ich dann einen eigenen Header erstellt und diesen Oberhalb des Listview controls positioniert. Nun jedoch einige Probleme:

    1. Ich habe im zwar den Header erstellt und auch die Items wie bei der Liste eingefügt, allerdings "gehören" die beiden Controls nicht zusammen, wenn man zB den Separator im Header verstellt, ändern Sie die Spalten in der Liste nicht. Wo erstellt man den Header richtigerweise (ich habe ihn im Verlauf der OnInitDialog() Funktion erstellt), und wie "ersetzt" man den default Header richtig?

    2. Ich habe bei Create die Eigenschaft WS_CHILD angegeben, bedeutet dies, dass alle Messages nicht an das Control, sondern an das übergeordnete Fenster, also das Fenster wo der Header ist gesendet werden?

    3. Um so Dinge wie Farbe oder Schriftart zu ändern, habe ich die OnPaint() Funktion überschrieben und da meine Sachen reingeschrieben, allerdings steht dies alles in der OnPaint() funktion meiner CHeader-Klasse, nicht in der Klasse, die das Control beherbergt, dementsprechend kann ich in dem OnPaint() makro auch nicht auf Variablen der "richtigen" Klasse zugreifen. Wo müssen solche Sachen richtigerweise definiert werden? Die OnPaint() Funktion der richtigen Klasse hat lediglich den Standard-Assistenten-Inhalt mit if (IsIconic()) und so weiter...

    Sorry für die vielen Anfängerfragen, aber ich Versuche immer noch die ganze Systematik und so weiter zu verstehen.



  • Du mußt auch eine eigene von CListCtrl abgeleitete Klasse erstellen und dort dann dessen Header ersetzen, s. z.B. C++ – Changing MFC List Control header color.



  • Mal so eine grundsätzliche Frage, wenn ich mir meine App mit Spyxx anschaue, sieht man dass das CListCtrl ein Fenster hat und in diesem Fenster befindet sich ein Unterfenster für den Header. Das CListCtrl ist dabei "von der Stange", also mittels Editor in VS hinzugefügt. wo findet der gesamte Zeichnungsvorgang für diese beiden DInge statt und kann man hier manuell eingreifen und so zb die Größe des Headers beeinflussen?


  • Mod

    @medic89 Jedes Fenster zeichnet sich selbst. Wenn Du das Header Control beeinflussen willst musst Du dieses subclassen.


Anmelden zum Antworten