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;
    			}
    		 }
    

Log in to reply