Feste Spaltenbreite ohne CListCtrl zu überschreiben
-
Hallo,
ist es möglich, das Verändern der Spaltenbreite (Bericht-Ansicht) durch den Benutzer zu verhindern, ohne eine neue Klasse von CListCtrl ableiten zu müssen?
-
Ja.
-
Toll, ist vielleicht wenigstens ein Hinweis drin?
Ok, vielleicht hätte ich dazu schreiben sollen, dass ich auch gerne wüsste wie es geht

-
Du musst CListCtrl nicht ableiten. Du musst das CHeaderCtrl im CListCtrl, das Du mit GetHeaderCtrl bekommst, subclassen und HDN_TRACK behandeln.
-
Es sollte auch ausreichen, im Parentfenster des List Control die HDN_ITEMCHANGING-Benachrichtigung zu verarbeiten und gegebenenfalls die Änderung zu verbieten.
-
Also, die zweite Möglichkeit (HDN_ITEMCHANGING im Parentfenster abzufangen) funktioniert. Man sieht zwar beim hin- und herschieben eine schwarze Linie, aber damit kann ich leben.
Beim ersten Ansatz erhalte ich eine Access Violation und zwar beim Zugriff auf nmh. Das liegt daran, dass das Objekt ungültig/fehlerhaft ist, d.h. lParam liefert nichts vernünftiges. Aber warum?
BOOL CTest2Dlg::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult) { NMHDR& nmh = *(NMHDR*)lParam; //<---------- nmh Fehlerhaft if (nmh.code==HDN_BEGINTRACKW || nmg.code==HDN_BEGINTRACKA) return *pLResult=TRUE; }Hab zwar jetzt eine Lösung, aber wenn einer weiss warum das andere nicht funktioniert wäre das auch nicht schlecht (ich lerne gerne was dazu).