CListCtrl, ColumnClick MSG, Problem mit Identifizierung des Cols



  • Hi,
    Ich habe eine ListCtrl und nabe über den ClassWizard ein MSG Handler eingeügt.

    void CPepPrintmonitorDlg::OnColumnclickListctrl(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    	// TODO: Add your control notification handler code here
    
    	*pResult = 0;
    }
    

    Nun weiss ich leider nicht wie ich auf die Spalte komme um dann z.B. die Liste
    nach dieser Spalte sortieren zu lassen....
    In der MSDN find ich auch kein NM_LISTVIEW struct, jedenfalls nicht im Index...

    Vielen Dank im Voraus
    MfG
    T1c4L



  • ist ein bisschen tricky... 😉
    deshalb kommt man da wenn man das das erste mal benutzt nicht gleich drauf

    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    int spalte=pNMListView->iSubItem;
    


  • weist du warum das nicht in der MFC steht, die struct beschreibung von

    NM_LISTVIEW? oder muss ich anders danach suchen?

    Viele dank und weiter so!!! 👍 👍



  • hi, ich habe jetzt wenig damit rumgespielt... allerdings haenge ich wieder ..

    vieleicht hast du eine Idee:

    int nItem = pNMListView->iItem;	// col item
    
    	LVCOLUMN*  lvc = new LVCOLUMN;
    	lvc->mask = LVCF_TEXT;
    	lvc->pszText = NULL;
    
    	m_ListCtrl.GetColumn(nItem, lvc);
    
    	CString temp = lvc->pszText;
    	MessageBox(temp);
    

    Die MessageBox bleibt leeer, will Die Spaltenüberschrift mit anzeigen aber das klappt leider nicht :-\



  • weist du warum das nicht in der MFC steht, die struct beschreibung von

    ka sowas interessiert mich auch nicht wirklich... Ich bin kein Informatiker der unbedingt verstehen muss wiso weshalb da was genau abläuft (bzw. wer wo was dokumentiert bzw.. unterlassen hat zu dokumentieren)... Mir reichts wenn ichs irgendwie zum laufen bekomme... 😉



  • äh sorry weiss ich jetzt auch nicht aus dem hut warum der da nichts in die structur reinschreibt...

    wenn du es allerdings so machst würd ichs mir der einfachheit halber verkneifen den speicher dynamisch zu allokieren sondern einfach die struktur auf den stack zu packen

    LVCOLUMN lvc;
    ...
    m_ListCtrl.GetColumn(nItem,&lvc);
    ...
    


  • Der Beitrag ist zwar schon etwas älter, aber vielleicht stößt ja noch einer auf die gleichen Fragen. (So wie ich!)

    const int size = 128; //Buffer größe
    char cbuffer[size];   //Buffer 
    
    LVCOLUMN plvcolumn;   
    
    plvcolumn.mask = LVCF_TEXT;
    plvcolumn.pszText = cbuffer;
    plvcolumn.cchTextMax = size;
    
    if(pList->GetColumn(iSpalte,&plvcolumn))   Spaltenkopf auslesen 
       MessageBox(msgtxt,"Spaltentitel");
    

    Größe und Ort des Textbuffers müßen bekannt gegeben werden.

    Mfg, Sigi

    PS.: Das meißte steht schon in der MSDN 😉

    LVCOLUMN

    typedef struct _LVCOLUMN { 
        UINT mask; 
        int fmt; 
        int cx; 
        LPTSTR pszText; 
        int cchTextMax; 
        int iSubItem; 
    #if (_WIN32_IE >= 0x0300)
        int iImage;
        int iOrder;
    #endif
    } LVCOLUMN, FAR *LPLVCOLUMN;
    

    pszText
    If column information is being set, this member is the address of a null-terminated string that contains the column heading text. If the structure is receiving information about a column, this member specifies the address of the buffer that receives the column heading text.
    cchTextMax
    Size of the buffer pointed to by the pszText member. If the structure is not receiving information about a column, this member is ignored.


Anmelden zum Antworten