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

Un contrôle maison pour votre Pocket PC
Auteur
Richard Clark
Date 17 janvier 2003
 
   


Petite note de

Ce très bon article est aussi disponible sur l'excellent site c2i.fr de notre ami Richard Clark, l'un des grands spécialistes français de .NET

Introduction

C'est la suite logique de mon précédent article sur la création d'un contrôle imitant le DropDownListBox d'un SmartPhone (je vous conseille de le lire pour bien tout comprendre). Il prend ici toute sa valeur puisque l'écran d'un Pocket PC est aussi un "petit écran" (240*320).

Nous allons donc voir comment créer un contrôle, et comment le placer dans une assembly (fichier .dll) pour qu'il soit exploitable dans d'autres applications. Voici à quoi cela ressemble dans l'émulateur :

Quand on clique sur les flèches, on parcourt donc l'ensemble des éléments dans la collection Items du SPListBox.

L'environnement de développement

Dans Visual Studio .NET 2003, créez tout d'abord un premier projet Pocket PC avec une WinForm de test (prjTest.vbproj).

Puis ajoutez à votre solution un nouveau projet Pocket PC mais cette fois-çi de type bibliothèque de classes (c2iPPCControls.vbproj).

Enfin, ajoutez une référence dans le premier projet vers le second projet (prjTest doit avoir une référence vers c2iPPCControls). Tous les types présents dans l'assembly c2iPPCControls seront donc accessibles dans le projet de WinForm.

Développement du contrôle

Vous vous souvenez (cf l'article précédent) que j'ai tout d'abord développé ce contrôle pour un Windows "classique". J'ai donc déjà à ma disposition le code source (.vb) de ce contrôle. Soyons fou et importons donc ce fichier dans notre projet c2iPPCControls.

Aïe, cela ne se passe pas très bien ! Non pas qu'il refuse l'importation, mais qu'il refuse de se compiler. Pourquoi ? Et bien parce que certains types et/ou méthodes que j'ai utilisée dans le projet pour Windows n'existent pas dans le Compact Framework. Le .NET Framework fait 20 Mo alors que le Compact Framework n'en fait que 1.5 Mo. Il a fallut donc que MS fasse des choix et enlève pas mal de type et de méthodes.

Je vous rassure, dans notre cas présent, il n'y a que très peu de changements :

  1. Les attributs (genre Browsable & Co) ne sont pas identiques. J'ai donc eu une attitude assez "bourine" : exit tous les attributs, je verrais cela plus tard.

  2. Le type ControlPaint qui me permettait de dessiner les flèches n'existe pas. Dans un premier temps, j'ai voulu faire appel à l'API DrawFrameControl, API existant bien dans WinCE 3.0. Après quelques tentatives infructueuses, j'ai honteusement renoncé et me suis rabattu sur une méthode plus classique en dessinant moi-même les flèches (cf le code en téléchargement).

Mise à part ces deux problèmes, mon projet c2iPPCControls compile maintenant parfaitement. J'ai donc une nouvelle assembly, c2iPPCControls.dll, disponible pour mon application WinForm pour Pocket PC.

Exploitons le contrôle

Comme tout bon capitaliste, je souhaite exploiter ce contrôle. La première étape dans notre projet WinForm pour Pocket PC que nous avons déjà effectuée consiste à rajouter une référence vers ce projet. Concrètement que fait Visual Studio .NET 2003 ?

  1. Il copie dans un premier temps l'assembly c2iPPCControls.dll dans le même répertoire que l'application WinForm.
  2. Puis dans la ligne d'argument de la compilation de cet exécutable, il ajoute la référence vers cette dll.

Bien maintenant, ajoutons notre "superbe" contrôle dans la WinForm. Encore une fois, plusieurs étapes.

Tout d'abord, déclarer une variable de type SPListBox :

Friend WithEvents SP1 As SPListBox

Ensuite, dans le constructeur de notre WinForm, créer le SPListBox, le positionner, le dimensionner et l'ajouter à la collection Controls dans la WinForm :

Public Sub New()
     MyBase.New() 
     'This call is required by the Windows Form Designer. 
     InitializeComponent()
     'Add any initialization after the InitializeComponent() call

     Me.SP1 = New SPListBox 
     Me.SP1.Location = New Point(120, 64)
     Me.SP1.Size = New Size(96, 20)
     Me.SP1.ForeColor = Color.Black 
     Me.Controls.Add(Me.SP1) 

     SP1.Items.Add("Bayonne") 
     SP1.Items.Add("Biarritz") 
     SP1.Items.Add("Anglet")
End Sub

Et voilà, vous pouvez maintenant utiliser tranquillement le contrôle dans vos applications.

Téléchargement du code source avec le programme de test.

 

Richard Clark

 
   

Copyright 2001-2004 - Tous droits réservés
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.