ListControll Insert
-
Hallo Leute,
habe folgendes Problem...Habe ein ListControll (WinForms) Element.
NodeList::NodeList(HWND *Dialog) { this->Dialog = Dialog; } void NodeList::Init() { HWND List; if(NULL == (List = GetDlgItem((*Dialog), NodeListForm))) { exit(0); } ListView_SetExtendedListViewStyleEx(List, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); LVCOLUMN lvc; lvc.mask = LVCF_TEXT |LVCF_WIDTH | LVCF_FMT; lvc.fmt = LVCFMT_LEFT; lvc.cx = 60; lvc.pszText = "Clients"; ListView_InsertColumn(List, 0, &lvc); lvc.cx = 100; lvc.pszText = "Max Clients"; ListView_InsertColumn(List, 0, &lvc); lvc.cx = 180; lvc.pszText = "IP"; ListView_InsertColumn(List, 0, &lvc); } void NodeList::InsertItem() { HWND List; if(NULL == (List = GetDlgItem((*Dialog), NodeListForm))) { exit(0); } SendMessage(List, LVM_DELETEALLITEMS, 0, 0); ZeroMemory(&List, sizeof(List)); LVITEM Item; Item.mask = LVIF_TEXT; Item.pszText = "BBB"; Item.iItem = 0; SendMessage(List, LVM_INSERTITEM, 0, (LPARAM)&Item); Item.pszText = "AAA"; Item.iSubItem = 1; Item.iItem = 1; SendMessage(List, LVM_INSERTITEM, 0, (LPARAM)&Item); }
Bei folgendem Code funktioniert die Init Funktion sehr gut. Sprich das ListControll Element bekommt die richtigen Spalten. Dummerweise passiert beim Insert einfach garnichts...
Hier noch der Code wie ich das anlege...
INT_PTR CALLBACK MainDialogHandler(HWND Dialog, UINT Message, WPARAM WParam, LPARAM LParam) { HICON Icon; switch(Message) { case WM_INITDIALOG: MyNodeList = new NodeList(&Dialog); MyNodeList->Init(); MyNodeList->InsertItem(); return true; break;
Warum funktioniert das einfügen nicht?
mfg Master of Dummheit
-
Du bist im falschen Forum mein Junge.
Benutzt Du aber trotzdem ...Name.Add("Eintrag");
-
C++/CLI mit .NET FAQ/Archiv
C++ mit .NET? C++ mit WinForms? Nennt sich C++/CLI, oder in der früheren Version Managed C++. Programmierung des .NET-Frameworks mit C++, oder Fragen zu den Erweiterungen von C++/CLI mit dem Visual Studio.Daher denke ich nicht das ich falsch bin...
2. Was soll das denn? Das is doch was völlig anderes...
-
Anhand des Codes ist eindeutig erkennbar, dass du kein WinForms bzw .NET verwendest, du nutzt die WinAPI direkt.
-
Du legst 3 Spalten mit dem gleichen Index an!
Da wo X steht fange mit 0 an und bei den anderen Spalten zählst du hoch:
ListView_InsertColumn(List, X, &lvc); -
Da du schon ListView_InsertColumn verwendest nimm doch auch ListView_InsertItem anstatt SendMessage(...)
-
Man ruft für eine Zeile nur einmal ListView_InsertItem auf, die anderen Spalten der Zeile werden mit ListView_SetItemText gefüllt.
-
-
Master of Dummheit schrieb:
C++/CLI mit .NET FAQ/Archiv
C++ mit .NET? C++ mit WinForms? Nennt sich C++/CLI, oder in der früheren Version Managed C++. Programmierung des .NET-Frameworks mit C++, oder Fragen zu den Erweiterungen von C++/CLI mit dem Visual Studio.Daher denke ich nicht das ich falsch bin...
2. Was soll das denn? Das is doch was völlig anderes...
Flachzange
-
Ahhh das ist schonmal etwas hilfreich gewesen hab meinen Code angepasst:
void NodeList::Init() { HWND List; if(NULL == (List = GetDlgItem((*Dialog), NodeListForm))) { exit(0); } ListView_SetExtendedListViewStyleEx(List, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); LVCOLUMN lvc; lvc.mask = LVCF_TEXT |LVCF_WIDTH | LVCF_FMT; lvc.fmt = LVCFMT_LEFT; lvc.cx = 60; lvc.pszText = "Clients"; ListView_InsertColumn(List, 0, &lvc); lvc.cx = 100; lvc.pszText = "Max Clients"; ListView_InsertColumn(List, 1, &lvc); lvc.cx = 180; lvc.pszText = "IP"; ListView_InsertColumn(List, 2, &lvc); } void NodeList::InsertItem() { HWND List; if(NULL == (List = GetDlgItem((*Dialog), NodeListForm))) { exit(0); } SendMessage(List, LVM_DELETEALLITEMS, 0, 0); LVITEM Item; Item.mask = LVIF_TEXT; Item.pszText = "AAA"; Item.iItem = 0; ListView_InsertItem(List, &Item); ListView_SetItemText(List, 0, 0, "a"); ListView_SetItemText(List, 1, 0, "b"); ListView_SetItemText(List, 1, 1, "c"); ListView_InsertItem(List, &Item); }
Leider wird immernoch rein garnichts in die Liste eingefügt...
-
Ah hab jetzt folgendes:
LVITEM Item; Item.mask = LVIF_TEXT; Item.pszText = "AAA"; Item.iItem = 0; Item.iSubItem = 0; ListView_InsertItem(List, &Item); ListView_SetItemText(List, 0, 0, "a"); ListView_SetItemText(List, 0, 1, "b"); ListView_SetItemText(List, 0, 2, "c"); ListView_InsertItem(List, &Item);
Das geht schon ganz gut nur das ich mit den SetItem kram jetzt das 2 element bearbeite und in der ersten Spalte immer AAA steht das is irgendwie auch noch nicht so ganz perfekt...