Le premier site francophone dédié au développement Pocket PC


Comment afficher la grille d'un ListView ?
 
u  

 

Le ListView est un contrôle bien pratique, mais il n'est pas toujours très lisible. En effet, les colonnes et les lignes ne sont pas matérialisées, ce qui rend parfois la lecture difficile :

Ceci est l'aspect normal du contrôle ListView fourni avec eVB.

Afficher les lignes et les colonnes, la grille quoi !

Le contrôle ListView de Windows CE permet d'afficher la grille. Par défaut le contrôle ListView eVB ne le fait pas, qu'à cela ne tienne, on va lui donner l'ordre de la faire.

Envoyer un message au ListView

Note: La technique que nous utilisons ici est celle que nous avons déjà utilisé pour rendre notre ListView FullRowSelect.

Pour envoyer un message il faut utiliser la fonction "SendMessage" qui est incluse dans la librairie dynamique Coredll (comme souvent). Cette API est déclarée en eVB de la manière suivante :

Declare Function SendMessage Lib "Coredll" Alias "SendMessageW" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Pour envoyer un message à un contrôle, il faut donner en paramètre de la fonction "SendMessage" le handle du contrôle (le hWnd), ce qui nous pose un gros problème car le contrôle ListView de eVB ne nous fournit pas cette information. Pour contourner ce problème, nous allons récupérer le hWnd de notre ListView grace à la fonction "GetFocus" (encore une API de Coredll) qui retourne le hWnd de l'objet qui a le focus au moment de l'appel. Ce système fonctionne très bien mais il faut impérativement que le contrôle ListView soit visible et qu'il ait le focus. La fonction "GetFocus" se déclare en eVB de la manière suivante :

Public Declare Function GetFocus Lib "Coredll" () As Long

Modifier le style du ListView

Pour indiquer au ListView que l'on veut une sélection sur toute la ligne, il faut tout d'abord récupérer les paramètres de style, puis appliquer le paramètre LV_EX_FULLROWSELECT, puis remplacer les anciens paramètres par les nouveaux (3 étapes donc). Pour effectuer cette opération nous avons aussi besoin de constantes :

Const LVM_GETEXTENDEDLISTVIEWSTYLE = &H1037
Const LVM_SETEXTENDEDLISTVIEWSTYLE = &H1036
Const LVS_EX_GRIDLINES = &H1

Nous pouvons écrire notre fonction qui va modifier le style de notre ListView et activer la sélection sur toute la ligne :

Sub LVGrid(ByVal wLV As ListViewCtrl)

Dim h As Long
Dim s As Long

Rem On récupère le hWnd du ListView en lui donnant le focus et en
Rem Utilisant l'API GetFocus()
Call wLV.SetFocus
h = GetFocus()

Rem On récupère les paramètres de style courant du ListView dans s
s = SendMessage(h, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)

Rem On ajoute (si celà n'est pas déjà le cas) la grille
s = s Or LVS_EX_GRIDLINES

Rem On enregistre les nouveaux paramètres
Call SendMessage(h, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, s)

End Sub


Ce qui donne ceci :

Nous avons maintenant un contrôle ListView avec une grille.

Important : La hauteur des lignes est calculée par rapport à la hauteur des icônes utilisées (dans notre exemple des icônes 16x16), ce qui implique que le ListView doit être lié à un contrôle ImageList (dont la taille est indiquée, voir l'article concernant l'ajout d'icônes à un ListView).

 

Voilà, vous savez maintenant créer des ListView de plus en plus lisibles.

 


Stéphane Sibué

 
       
   
 
   
Copyright 2001-2004 - Tous droits réservés
 
   

iPAQ est un produit de COMPAQ.
Visual Tools est un produit de Microsoft Corporation.
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.