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