Listview unter WinAPI32

Technipion

Erfahrenes Mitglied
Hey Leute,
ich habe einige kleinere Kartenspiele programmiert, die man übers Netzwerk daheim oder im Internet spielen kann. Im Moment hänge ich aber am Server-Verwaltungstool. Ich brauche dafür eine ListBox (eigentlich ein ListView) in der ich die beteiligten Spieler anzeigen kann (so etwas wie Spielername, Netzwerkname, IP, usw...).
Das Problem ist, dass die ListView nicht läuft. Ich habe eine Seite gefunden auf der erklärt wird, wie man eine solche ListView erstellt:
http://www.codeproject.com/Articles/2890/Using-ListView-control-under-Win32-API
Also habe ich alles so gemacht aber es passiert nichts.
Ich habe commctrl.h included, comctl32.lib verlinkt und alles in einer Funktion initialisiert:
Code:
void InitCmmnControls()
{
    INITCOMMONCONTROLSEX InitCtrls;
    InitCtrls.dwICC = ICC_LISTVIEW_CLASSES;
    InitCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);
    BOOL bRet = InitCommonControlsEx(&InitCtrls);
}
In der WM_CREATE case meines Hauptfensters habe ich dann die ListBox erstellt:
Code:
//create list view control
            hListLoggedIn = CreateWindowEx(WS_EX_CLIENTEDGE, "listbox", "", WS_VISIBLE | WS_CHILD, 100, 100, 500, 100, hwnd, NULL, NULL, NULL);
            LVITEM LvItem;
            LVCOLUMN LvCol;
            memset(&LvCol, 0, sizeof(LvCol));
            LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
            LvCol.cx = 100;
            LvCol.pszText = "Item";
            SendMessage(hListLoggedIn, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
            SendMessage(hListLoggedIn, LVM_INSERTCOLUMN, 0, (LPARAM)&LvCol);
            LvCol.pszText = "Sub Item1";
            SendMessage(hListLoggedIn, LVM_INSERTCOLUMN, 1, (LPARAM)&LvCol);
            LvCol.pszText = "Sub Item2";
            SendMessage(hListLoggedIn, LVM_INSERTCOLUMN, 2, (LPARAM)&LvCol);
            LvCol.pszText = "Sub Item3";
            SendMessage(hListLoggedIn, LVM_INSERTCOLUMN, 3, (LPARAM)&LvCol);
            memset(&LvItem, 0, sizeof(LvItem));
            LvItem.mask = LVIF_TEXT;
            LvItem.cchTextMax = 256;
            LvItem.iItem = 0;
            LvItem.iSubItem = 0;
            LvItem.pszText = "Item 0";
            SendMessage(hListLoggedIn, LVM_INSERTITEM, 0, (LPARAM)&LvItem);
            LvItem.iItem = 1;
            LvItem.iSubItem = 0;
            LvItem.pszText = "Item 1";
            SendMessage(hListLoggedIn, LVM_INSERTITEM, 0, (LPARAM)&LvItem);
Wenn ich das Programm ausführe, erscheint die ListBox zwar, aber es befinden sich keine Columnen oder Items darin. Auf einen Klick reagiert sie mit einem gepunkteten Rechteck ganz oben (nulltes Element wird markiert).
Ich benutze Code::Blocks 10.05 und habe auch das Windows XP Look'n'Feel Flag gesetzt.
Sieht einer von euch woran es liegt, oder habt ihr eine Idee was ich versuchen könnte?

Danke schonmal im Voraus
Gruß Technipion
 
Danke für die Antwort!
Jetzt motzt er aber, dass LV_VIEW_DETAILS nicht deklariert ist. Hab bei MSDN geguckt, eigentlich müsste das durch den Header commctrl.h und durch die comctl32.lib schon drin sein...
Ist doch komisch, LVM_SETVIEW gibts, aber keine der Flags...
Hast du ne Ahnung wie ich das hinkriege?
Danke schonmal
Gruß
 
Du hast vermutlich als Ziel-Windows-Version 0x0400 (WINVER) eingestellt?

Laut dem Header wird das Define

_WIN32_WINNT >= 0x0501

geprüft. Das kannst du in Präprozessor reinsetzen. Eigentlich heißt das Define, ab XP läuft dein Programm. Praktisch sollte es auch auf älteren Windows-Versionen laufen, da kann es aber davon abhängen, welche Version des IE installiert ist. Der IE hatte bei älteren Windows-Versionen meistens neuere Controls mitgebracht.
 
Hey,
danke für die Antwort, leider isses aber net so einfach. Ich habe die Windows-Version bereits eingestellt. Ich kapier echt nicht warum das nicht funktioniert?!
Hier der Header meiner Hauptdatei:
Code:
#ifdef UNICODE
#define _UNICODE
#endif /* UNICODE */

#define _WIN32_IE 0x0501

#include <afxres.h>
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <commctrl.h>
#include <iostream>
#include "skat.cpp"
#include "maumauserver.h"
#include "ezfont.c"
using namespace std;
Zur besseren Anschaulichkeit habe ich jetzt auch mal noch einen Snapshot des Programmes angehängt. Eindeutig keine Border oder Items in der ListBox.
Hat vielleicht noch eine ne Idee? Bitte...
Danke schonmal im Voraus
Gruß Technipion
 

Anhänge

  • snapshot - listview.png
    snapshot - listview.png
    36,1 KB · Aufrufe: 17
Ah, ok :)

Ürgs, jetzt erst gesehen. Du hast als Klasse ListBox angegeben, das ist die simple Version. Du möchtest WC_LISTVIEW (bzw. SysListView32)

Dann paßt auch der Rest.

Zur Version, _WIN32_WINNT und _WIN32_IE sind zwei verschiedene Dinge, im Header für den DETAILS-Style steht explizit nur _WIN32_WINNT >= 0x0501
 
Zurück