ListView erstellen
-
Hi,
kann mir jemand sagen, wie man ein ListView unter Dev-C++ (bzw. Mingw) erstellt. Ich hab nun schon den halben Tag damit verbracht. Ich bin noch relativer Anfänger, die Beispiel im Internet laufen immer nicht, bitte mit Quelltext.
Hier noch ein zwei Auszüge aus meine Versuchen:HWND DoCreateTVControl(HWND hwndParent, HINSTANCE g_hinst, int i, int x, int y, int width, int height) { HWND hwndTree; INITCOMMONCONTROLSEX ictrlex; ictrlex.dwSize = sizeof(INITCOMMONCONTROLSEX); ictrlex.dwICC = ICC_TREEVIEW_CLASSES ; //wir wollen ja dir Treeviewklassen InitCommonControlsEx(&ictrlex); //ok Initialisieren hwndTree = CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW, "", WS_CHILD |WS_BORDER| WS_VISIBLE, x, y, width, height, hwndParent, (HMENU) i, g_hinst, NULL); return hwndTree; }
hwndListe = CreateWindow(WC_LISTVIEW, "", WS_CHILD | WS_BORDER | WS_VISIBLE | VS_EDITLABELS | LVS_SORTASCENDING | LVS_REPORT, 5, 5, 500 , 300, hwnd, (HMENU)ID_LISTVIEW, hThisInstance, NULL);
Vielen Dank
mfg
-
und wo ist jetzt dabei das problem? kriegst du es nicht kompiliert? wird nichts angezeigt?
-
Sorry, falls das jetzt zu ungenau war.
In beiden Fällen habe ich die windows.h und die commctrl.h eingebunden.Also in der ersten Variante bekomme ich immer vom Linker die Meldung:
c:\...\api\test\test.o: In functionWinMain': //c/.../api/test/test.cpp:116: undefined reference to
InitCommonControlsEx@4'Und bei der 2. Variante wird zwar kompiliert, aber dann wird nur das Fenster ohne ListView angezeigt.
Der Kompiler meint immer "Project 4 compiled successfully".
Kann ich denn irgendwo Beispiel-Projekte für Dev-C++ finden? Das währe auch für andere Probleme gut.
mfg
-
na, du musst für InitCommonControlsEx noch die comctl32.lib mitlinken!
-
Ja, das wollte ich auch schon machen, aber ich finde die nicht. Wo kann man die denn her beziehen oder erzeugen???
-
... oder erzeugen
Die sind beim MSCV++ dabei oder zu lädst sie mit dem PSDK runter
M.T.
-
Schau einfach in die Anleitung deines Compilers wie das geht.
-
Original erstellt von mirkos:
Ja, das wollte ich auch schon machen, aber ich finde die nicht. Wo kann man die denn her beziehen oder erzeugen???Die sind beim DevCpp dabei.
Wenn eine library laut MSDN name.lib heißt, so heißt sie beim DevCpp libname.a
In diesem Fall musst du also die libcomctl32.a linken. Das machst du in den Projektoptionen.
-
So,
ich hab's jetzt mit der libcomctl32.a und mit der comctl32.lib versucht. Und beides funktioniert nicht. Ich bekomme folgende Meldung:C:\...\api.cpp [Warning] In function `struct HWND__ * CreateListView(HWND__ *, HINSTANCE__ *)': 31 C:\...\api.cpp implicit declaration of function `int InitCommonControlsEx(...)' 25 C:\...\api.cpp `INITCOMMONCONTROLSEX' undeclared (first use this function) (Each undeclared identifier is reported only once for each function it appears in.) 25 C:\...\api.cpp parse error before `;' 29 C:\...\api.cpp `icex' undeclared (first use this function) 31 C:\...\api.cpp implicit declaration of function `int InitCommonControlsEx(...)'
Vielleicht währe es möglich, dass mir jemand ein Beispielcode gibt?
Danke.mfg
[ Dieser Beitrag wurde am 25.11.2002 um 20:18 Uhr von mirkos editiert. ]
-
Hast du die Headerdatei "commctrl.h" auch eingebunden?
-
Ja, natürlich.
-
Ok, hab gerade mal nachgeschaut. Beim Dev-C++ musst du noch eine Konstante definieren, damit du die Funktion InitCommonControlsEx benutzen kannst. Schreib mal bevor du die Headerdateien einbindest:
#define _WIN32_IE 0x0300
-
Es geht! Vielen Dank an alle noch mal. Und für die die sich auch dafür interessieren (das Design ist vielleich nicht so gut, weil ich mich da noch nicht so auskenne):
Dev-C++: Die „libcomctl32.a“ bei den Projektoptionen einbinden:#include <windows.h> #define _WIN32_IE 0x0300 #include <commctrl.h> HWND hwndListe; HINSTANCE hThisInstance; LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM); char szClassName[ ] = "Window"; int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { static HINSTANCE hInstanceList; static int i, iCol; static char *szText[3] = {"Field1","Field2", "Field3"}; static int szTextColWidth[3] = {50,50,50}; static LVCOLUMN lvc; int index; LV_ITEM lvI; LV_ITEM lvSI; ... (WinMain usw.) //List View erstellen: INITCOMMONCONTROLSEX ictrlex; ictrlex.dwSize = sizeof(INITCOMMONCONTROLSEX); ictrlex.dwICC = ICC_LISTVIEW_CLASSES; InitCommonControlsEx(&ictrlex); hwndListe = CreateWindow(WC_LISTVIEW, "",WS_CHILD | WS_BORDER | WS_VISIBLE | LVS_EDITLABELS | LVS_SORTASCENDING | LVS_REPORT, 5, 5, 150 , 300, hwnd, (HMENU)ID_LISTVIEW, hThisInstance, NULL); lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; for (iCol = 0; iCol < 3; iCol++) { lvc.iSubItem = iCol+1; lvc.pszText = szText[iCol]; lvc.cx = szTextColWidth[iCol]; // width of column in pixels lvc.fmt = LVCFMT_LEFT; // left-aligned column ListView_InsertColumn(hwndListe, iCol, &lvc); } //Daten einfügen, 1. Spalte (items): // Some code to create the list-view control. // Initialize LVITEM members that are common to all items. lvI.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE; lvI.state = 0; lvI.stateMask = 0; // Initialize LVITEM members that are different for each item. for (index = 0; index < 3; index++) { lvI.iItem = index; lvI.iImage = index; lvI.iSubItem = 0; lvI.pszText = "MMM"; if(ListView_InsertItem(hwndListe, &lvI) == -1) MessageBox (NULL, "ListView" , "Fehler", 0); } lvSI.mask = LVIF_TEXT | LVIF_STATE; lvSI.state = 0; lvSI.stateMask = 0; // Daten einfügen, weiter Spalten (subitems): for (index = 1; index < 3; index++) { lvSI.iItem = 2; lvSI.iSubItem = index; lvSI.pszText = "AAaa"; if(ListView_SetItem(hwndListe, &lvSI) == -1) MessageBox (NULL, "ListView" , "Fehler", 0); } //...oder... //Text einfügen, weiter Spalten (subitems): ListView_SetItemText(hwndListe, 2 ,2 ,"AA");
:
Falls jemand einen Fehler findet, bitte sofort schreiben.
mfg