CListview
-
Ja jetzt geht der bei mir auch.
Ich musste in den EIgenschaften auf Bericht stellen anstatt auf Liste.
Und wie mache cih das jetzt, wenn ein Elemente der einen Spalte ausgewählt ist das alle ander auch ausgewählt werden in den adneren Spalten also eine komplette Zeile ausgewählt wird?
-
Dazu fällt mir LVN_FULLROWSELECT ein, bei dem Teil vor dem _ bin ich mir aber nicht sicher.
Ich muss auch nochmal gucken, bis gleich.
PS: Wenn wir so weiter machen, haben wir bald einen schönen Leitfaden...

-
Ja man könnte aus dem Ergebnis später mal ein Tutorial sonst machen.
Übrigens vielen Dank für deine Hilfe.
Werde diese eventuell noch häufiger brauchen *gg+
-
Guck mal, hab ich im Nachbarforum gefunden: http://www.c-plusplus.net/forum/viewtopic.php?t=15697&highlight=fullrowselect
-
Das versteh ich nun nicht wie ich das einsetzen muss mit dem fullrowselect..
Kansnt du mir da nochmal helfen, wo füge ichd enn nun was genau ein?
Habs mir angeschaut aber plan das nicht....
-
So, nun habe ich es geschafft die ganze Zeile zu markieren.
Kann mir noch jemand dabei helfen, wie man herausfindet welches Element gerade markiert ist?
-
Hmm, ausnahmsweise gibt es eine Lösung, nur mit kritischen Stellen ausgexxxxt:
void xxxxxx::OnItemchangedLstMain(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; int nItem = pNMListView->iItem; if(pNMListView->uChanged & LVIF_STATE) { if(LVIS_SELECTED & pNMListView->uNewState) { if(LVIS_FOCUSED & pNMListView->uNewState) { // Diese Zeile ist markiert! } } } *pResult = 0; }
-
Hi,
Du das versteh ich nicht ganz. Was passiert denn da?
Ich möchte das ja möglichst verstehen und nicht nur einbauen.Was wird denn zurückgegeben ein Integerwert?
Weil ich wollte das so mache, das ich erstmal feststelle welche Zeile markiert ist, um diese dann zu löschen oder zu ändern...
Ich hatte mir gedacht, das man es eventuell so macht das man versucht herauszubekommen welchen Index die markierte Zeile gerade hat.Wieso schreibst du eigentlich Kritische Stellen?
Programmierst du richtig professionell und darfst deinen Code nicht freigeben?
Nur so aus Interesse nachgefragt...
-
Ich beantworte die letzte Frage einfach mal zuerst:
Ich arbeite als Softwareentwicklerin.Der Code, den ich dir geschickt habe, ist so weit, wie du ihn sehen kannst, allgemeingültig und nix geheimes. Ich habe nur die Teile rausgenommen, die Projektspezifisch sind.
Der Schnipsel stammt aus einer Sammlung, die ich mir gemacht habe, weil ich mit der GUI nicht so klar komme. Ich bin da eher Liebhaberin der Daten(bank)schicht.
Und gerade weil ich das nicht verstehe, kann ich dir den Schnipsel nicht erklären. Ich habe nr herausgefunden, dass ich genau mit dem Code was mit dem markierten Element machen kann.
Den GUI Kram muss ich jetzt leider auch lernen, aber ich bin noch nicht so weit. Ganz schlimm wird es, wenn ich ans Drucken komme. Da habe ich keinen Schimmer, aber das ist noch ne Weile hin.
Hast du die Funktion denn eingebaut bekommen? Denn die Funktion ist nur die halbe Miete... aber du forscht ja gerne

-
Und ich dachte schon, das geht mit GetSelectionMark()

-
hmm, könnte...
Vielleicht war das eine Lösung für eventuelle Sonderfälle...
*grübel*
Ich glaube, da war was in der Art, wegen sofort reagieren der so. Könnte sein. Aber ich hab ja gesagt, bin nicht so fit.

-
So, jetzt habe ich auch eine Frage:
Kann man die Breite eines Listcontrol herausbekommen? Ich habe immer Ärger mit den Spaltenbreiten, weil ich das erstmal ausprobieren muss, bis es passt. Das finde ich unschön.
-
Ich habe das nun mit dem herausfinden der Markierung so gelöst, stammt aus der MSN..
CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem(IDC_LIST); ASSERT(pListCtrl != NULL); POSITION pos = pListCtrl->GetFirstSelectedItemPosition(); if (pos == NULL) MessageBox("No items were selected!\n"); else { while (pos) { int nItem = pListCtrl->GetNextSelectedItem(pos); TRACE("Item %d was selected!\n", nItem); // you could do your own processing on nItem here } }in leicht abgewandelter Form...
Das mit dem ListControlbreite weiß ich leider (noch) nicht.
Interessiert mich aber auch, so das ich morgen mal nachforschen werde.Hab aber noch eine andere Frage:
Wie kann ich die Listview aktualisieren, weil am Anfang beim initialisieren lade ich eine Liste hinein, die auch angezeigt wird, aber wenn cih später Elemente hinzufüge sind die nicht zu sehen, erst nach einem neustart wenn die Liste neugeladen wird...
-
Irgendwie hat man die besten Ideen nicht bei der Arbeit: Heute morgen im Bus hatte ich eine Idee und sie hat funktioniert:
// Breite des Listcontrols holen RECT rect; m_lscOrte.GetWindowRect(&rect); int nBreite = rect.right - rect.left - 4; // 4 damit es schöner aussieht.Blos wie man die 4 verallgemeinern kann, weiß ich nicht. Das gucke ich aber nochmal.