Breitenänderung einer Spalte im Listview abfangen, wie??



  • Wie muss ich in meinem Eventhandler vorgehen um die Breitenänderung einer Spalte für ein im Reportstyle erzeugtes Listviewfenster abzufangen. Ich möchte grundsätzlich die breitenänderung für alle Spalten, bis auf die erste zulassen, jedoch darf die breite der ersten nicht verändert werden. Wie stell ich das am besten an?


  • Mod

    Du musst das CListView subclassen und dann HDN_BEGINDRAG abfangen. Das Header Control ist im ListView eingebettet, deshalb musst Du die Nachricht dort abfangen.
    Dito für HDN_DIVIDERDBLCLICK!



  • Ich habe meinen Code nicht in c++ geschrieben, da ist also nichts mit subclassen, zumindest habe ich keine Ahnung davon. Wie geht das rein mit ansi-c und winapi?



  • Subclassen kannst Du auch in C. Siehe ➡ http://winapi.net/index.php?inhalt=s27



  • Also ich hab das jetzt immer noch nicht hinbekommen, welche Nachricht muss ich denn wie in meiner Eventhadle Funktion abfangen. Kann mir da jemand helfen oder einen Verweis zu einem Beispielcode posten, wäre echt Klasse. Irgendwie bekomme ich das mit: HDN_ITEMCHANGING, HDN_BEGINTRACKW oder HDN_BEGINTRACKA nicht hin.



  • ok soweit bin ich schon mal:

    case WM_NOTIFY:{
    		switch (((LPNMHDR)lParam)->code){
    			case HDN_ITEMCHANGING:
    				if((int)((HD_NOTIFY FAR *) lParam)->iItem == 0){
    					return 1;
    				}
    

    Jetzt werden, aber alle Größenänderungen aller meiner Childwindows, die deren erste Spalte (id 0) betreffen abgefangen. Wie beschränke ich jetzt diese Auswahl auf ein bestimmtes Childwindow?



  • ok damit ihr net dumm sterbt

    case WM_NOTIFY:{
    		switch (((LPNMHDR)lParam)->code){
    			case HDN_ITEMCHANGING:
    				if((int)((HD_NOTIFY FAR *) lParam)->iItem == 0){
    					if((int)((HD_NOTIFY FAR *)lParam)->hdr.hwndFrom == (int)SendMessage(Wnd_Child_1, LVM_GETHEADER, 0, 0)){
    						return 1;
    

Anmelden zum Antworten