LVS_EX_HEADERDRAGDROP und neue Position von clumns auslesen



  • Hallo alle,

    ich habe:

    CListCtrl & ctrl = GetListCtrl();
    ctrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP );

    ctrl.InsertColumn(0, "text0", LVCFMT_LEFT, 70);
    ctrl.InsertColumn(1, "text1", LVCFMT_LEFT, 70);
    ctrl.InsertColumn(2, "text2", LVCFMT_LEFT, 70);
    ctrl.InsertColumn(3, "text3", LVCFMT_LEFT, 70);

    mit "LVS_EX_HEADERDRAGDROP" kann der user die columns Drag&Drop. Zum Beipiel changed (in View):

    ctrl.InsertColumn(3, "text3", LVCFMT_LEFT, 70);
    ctrl.InsertColumn(1, "text1", LVCFMT_LEFT, 70);
    ctrl.InsertColumn(2, "text2", LVCFMT_LEFT, 70);
    ctrl.InsertColumn(0, "text0", LVCFMT_LEFT, 70);

    Aber wenn ich mit:
    CString str = listCtrl->GetItemText( 0, 0 );
    auslese, habe ich immer noch str="text0" bekommen 😮 . Es soll str = "text3" sein.

    Hat jemand die Idee, wie kann ich die geändert position von column auslesen?



  • Also ich würde an deiner Stelle mir einfach die Column Reihenfolge von Ctrl geben lassen mit CListCtrl::GetColumnOrderArray.

    Sollte dir eigentlich die Reihenfolfe der Spalten in einem Array zurück geben anhand derer u die entsprechenden Spaltentexte auslesen kannst.



  • Hallo,

    die Dimension der Header kannst Du z.B. so Auslesen:

    Es gibt einige Makros für den Zugriff auf Header, damit
    kommst bekommst Du auch den Text. Wenn das über die Mausposition machen
    möchtest via GetMessagePos() GetCurPos() liefert die zeitnahe Koordinate.

    Pseudo

    CPoint pt(GetMessagePos());
    		CHeaderCtrl* pHeader = (CHeaderCtrl*)GetDlgItem(0);
    		pHeader->ScreenToClient(&pt);
    
    		// Determine the column index
    		int index;
    		CRect rcCol;
    		if(pHeader)
    		 for( int i=0; Header_GetItemRect(pHeader->m_hWnd, i, &rcCol); i++ )
    		 {
    			if( rcCol.PtInRect( pt ) )
    			{
    				index = i;
    				break;
    			}
    		 }
    

Anmelden zum Antworten