Artikel-ID: 250614 - Geändert am: Dienstag, 21. November 2006 - Version: 1.2 So sortieren von Elementen in ein CListCtrl in Bericht anzeigen
ZusammenfassungFür den Prozess der Sortierung der Elemente in einem ListView-Steuerelement, insbesondere eine eingebundenes CListCtrl MFC-Klasse wurde nicht viele Informationen bereitgestellt. Die Details sind leicht zu implementieren, und in diesem Artikel versucht, die Lücke in der Dokumentation dieses nützliche Feature. Im Beispielcode stellt ein MFC-Dialogfeld mit einem Listensteuerelement legen Sie die Formatvorlage LVS_REPORT dar. Weitere InformationenUm die Elemente in einem ListView-Steuerelement zu sortieren, muss eine dem Element zugeordnete LVITEM Struktur vorhanden sein. MFC bietet dies für Entwickler, ermöglicht ein Element mit einem einfachen InsertItem(int nItem, LPCTSTR lpszItem) Funktionsaufruf eingefügt werden, die die Struktur mit angemessenen Standardeinstellungen erstellt. Solche ein Puffer von der zugrunde liegenden Komplexität kann manchmal irreführend sein. Die Struktur LVITEM ist jedoch ein wichtiger Schlüssel zum Bearbeiten von ListView-Elemente, einschließlich des Sortierung Mechanismus. Das lParam -Element der LVITEM Informationen erforderlichen. Wenn die Funktion SortItems CListCtrl -Klasse aufgerufen wird, muss Sie einen Funktionszeiger auf eine Rückruffunktion sortieren und einen anwendungsdefinierten DWORD- Wert bereitstellen. Während der Sortierung wird die Callback-Funktion wiederholt aufgerufen, wie zwei Elemente im Listensteuerelement für den Vergleich ausgewählt sind. Der Parameter, die er empfängt, das lParam Element jedes Elements LVITEM Struktur sind und der DWORD- Wert durch den Aufruf SortItems übergeben. Der Code unten stellt ein einfaches Beispiel Sortieren einer Liste der zehn US Presidents in einem ListView-Steuerelement dar. Die Presidents werden zunächst in ein statisches mehrdimensionalen CString-Array gespeichert. Die Rückruffunktion sortieren kann statisch als Member einer Klasse oder als hier einfach als globale Funktion definiert werden: Das lParam-Element kann alles von einfach bis sehr komplex sein. Häufig empfiehlt sich eine Struktur in diesem Kontext ermöglicht mehrere Teile der Daten auf die verwiesen werden soll. Für dieses Beispiel wurde eine Struktur namens ITEMDATA definiert, um die drei Elemente, die ein bestimmtes Element enthalten: In diesem Beispiel wird die Struktur wurde in einer von CDialog -Klasse Headerdatei definiert, und eine Membervariable eines Zeigers auf ein Array von 10 definiert wurde: Ein Dialogfeld ein ListView-Steuerelement hinzugefügt wurde, und eine Membervariable definiert M_ctlListView aufgerufen. Die Elemente wurden in OnInitDialog hinzugefügt: Letzte Namen, Vornamen und Begriff von Office wurden drei Spalten eingefügt. Für jedes der 10 Elemente, wird eine neue ITEMDATA Struktur anschließend zugeordnet und von CString-Array initialisiert. Das Element wird eingefügt sehr einfach nur der Index mit der letzten Zeichenfolge, dann der Text für die beiden anderen Spalten des Elements festgelegt ist. Schließlich wird die Funktion SetItemData aufgerufen neue ITEMDATA als Parameter übergeben. Diese lParam des Artikels LVITEM Struktur initialisiert und bereitet die Möglichkeit für die Sortierung vor. MFC in Visual C++ 6.0 hat ein Problem mit Header Benachrichtigungen für das ListView-Steuerelement. Obwohl ein Handler hinzugefügt werden kann, ist nicht in der aktuellen Version es aufgerufen. Verwenden Sie z. B. Class-Assistenten oder die Assistentenleiste zum Hinzufügen eines Meldungshandlers Windows. Wenn die ID für das ListView-Steuerelement hervorgehoben ist, gibt eine Reihe von Benachrichtigungsmeldungen zur Auswahl zur Verfügung. Wählen Sie Benachrichtigung HDN_ITEMCLICK , um die Elemente zu sortieren, wenn die Kopfzeile für eine bestimmte Spalte geklickt wird. Ein Meldungszuordnungseintrag ON_NOTIFY wird sowie eine Handlerfunktion generiert. Für das aktuelle Beispiel wird der Eintrag wie folgt angezeigt: Das Problem besteht hier darin, dass die Benachrichtigung von ListView-Steuerelement tatsächlich stammen nicht; stattdessen das Header-Steuerelement erstellt, indem der ListView sendet die Benachrichtigung. Die oben aufgeführten Nachrichtenzuordnungseintrag funktioniert nicht. Das Update ist einfach, jedoch, da das Kopfzeilen-Steuerelement immer eine Kennung von 0 hat, das Makro kann bearbeitet werden ordnungsgemäß funktioniert: Dann wird in der OnItemclickList1-Handler der SortItems Aufruf vorgenommen: Der Benachrichtigung-Nachrichtenkopf ( NMHDR ) ist tatsächlich eine ListView Benachrichtigung, NMLISTVIEW , mit den Index der Spalte, auf die geklickt wurde. In diesem Beispiel wird dies von iItem dargestellt. Komplexere Listen müssen möglicherweise das iSubItem -Element der sowie diese Struktur verweisen. Die Adresse der Callback-Funktion ist an SortItems zusammen mit der Spalte Anzahl übergeben, die auf den geklickt wurde. Die SortFunc-Routine wird wiederholt aufgerufen, als Paare von der ListView-Elemente für den Vergleich an die Funktion übergeben werden. Die ersten beiden Parameter sind die lParam -Element der die jeweiligen Artikel LVITEM Struktur; der dritte Parameter (anwendungsdefinierte) ist die Spaltennummer in der SortItems Aufruf zur Verfügung gestellt. Der Spaltenindex in lParamSort übergeben bestimmt, welches Element der Objekte ITEMDATA in lParam1 übergeben und lParam2 sollte für den Vergleich verwendet werden. Das Ergebnis wird zurückgegeben, und der Prozess wird fortgesetzt, bis alle Elemente sortiert wurden. Als Erinnerung müssen die ITEMDATA-Strukturen die für die Listenelemente zugeordnet wurden schließlich gelöscht werden. Der WM_DESTROY -Handler für das Dialogfeld für dieses Beispiel durchläuft die Member-Elemente und gelöscht. InformationsquellenWeitere Informationen auf dem common ListView-Steuerelement finden Sie in der Platform SDK -Dokumentation unter Windows Common Controls im Abschnitt User Interface Services .
Maschinell übersetzter ArtikelWichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten. Den englischen Originalartikel können Sie über folgenden Link abrufen: 250614
(http://support.microsoft.com/kb/250614/en-us/
)
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
| Weitere Ressourcen Weitere SupportseitenCommunitySPRACHE AUSWÄHLEN |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email



Zum Anfang