Pocket PC développement

J'ai décidé de porter mon jeu de SuDoKu sur P.C.

Mon langage de prédilection reste le C++, sous c++ builder, mais les pocket pc ne sont pas supportés.

Il n'y a que les outils Microsoft. Mais je suis allergique aux bibliothèques graphiques de microsoft (MFC)

Sous Visual Studio, seul le C# permet de programmer visuellement l'IHM, alors j'y suis passé.

C#

Comme Microsoft a sorti le C# de son chapeau pour ne plus avoir de conflit avec SUN à propos de Java, je pensais que C# était un clone de Java.

En fait, il est plus proche du C++ que ne l'est Java.

Essentiellement parce qu'on peut passer des arguments par référence :

Passage des arguments par référence

Cela se fait en utilisant le mot clef "ref" aussi bien à la déclaration qu'à l'appel

déclaration : public bool resoudre( ref int lTrouve,ref int cTrouve)

appel : monTsu.resoudre( ref l, ref c)

Tableaux

L'utilisation des tableaux est un peu déroutante:

déclaration à 2 dimensions : TextBox[,] myGrille;

création : myGrille = new TextBox[9,9];

 Récupérer le répertoire de lancement

Assez cabalistique sur pocket PC

string strCurrentDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);

Visual studio c# pour pocket PC

Vous pouvez développer votre IHM graphiquement avec visual studio sous C#:

Le prix à payer est que l'utilisateur devra installer d'abord Compact Net de microsoft, version compact pour Pocket PC mais qui pèse quand même 26 Mo.

Générer le cab d'installation pour pocket pc

Pour déployer votre application il faut créer un projet de type cab pour smart device

Donnez un nom à votre produit.

Placez les fichiers à installer dans le Dossier d'application.

L'un d'eux doit être de type Sortie de projet pour récupérer l'exécutable résultat du projet c#

L'autre dossier doit comporter le raccourci vers votre exécutable

Puis Générer, le fichier application.cab est créé.

Vous pouvez le transférer par activesync et lancer l'installation en double-cliquant dessus.

Vous pouvez aussi utiliser PocketSetupCreatorFR, utilitaire gratuit de microsoft pour générer un exe que vous pouvez distribuer.

En double cliquant dessus sur un PC relié votre utilisateur pourra lancer l'installation

Le son

Jouer un .wav n'est pas directement accessible au C#. Il faut passer par la dll CoreDll.DLL.

Voici un source permettant d'y accéder.

Pour l'utiliser:

using v2k.NetCF.Utility; // référence à la librairie

SoundWrapper son;     // déclarer un son

// récupérer le répertoire de votre application

string strCurrentDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);

string wav = strCurrentDir + "\\son.wav";  // sélectionner le son à jouer

explosion = new SoundWrapper(wav);     // créer l'objet

flop.Play(); // jouer e son

Je l'ai modifié pour

bulletRendre l'exécution du son bloquant (SND_SYNC) pour pouvoir jouer deux sons d'affilé
bulletNe pas jouer le son si le niveau sonore est à 0

Récupérer le répertoire de travail

Le répertoire courant n'a pas l'air de bien marcher pour accéder aux fichiers.

Mais vous pouvez le récupérer pour construire un nom absolu:

using System.Diagnostics;

string strCurrentDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);

Suspendre le temps

using System.Threading;

Thread.Sleep(millisecondes);

Base de registre

using Microsoft.Win32; // spécifique à windows

RegistryKey reg; // déclaration

// vos pouvez aussi utiliser OpenSubKey, mais alors, le répertoire doit exister

reg = Registry.CurrentUser.CreateSubKey("SOFTWARE").CreateSubKey("Psylon").CreateSubKey("sudoku");

if(reg!=null)

    difficulte.Text = reg.GetValue("Niveau",99).ToString(); // lire

reg.SetValue("Niveau", difficulte.Text); // écrire

reg.Close(); // fermer

Lancer l'aide

// en principe, ça se fait par :

Help.ShowHelp(this, "Program Files\\tsudoku\\index.html");

// mais si vous utiliser une aide plus évoluée avec plusieurs fichiers html, il vaut mieux utiliser l'explorateur standard

string strCurrentDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);

ProcessStartInfo info;

info = new ProcessStartInfo();

string path = info.FileName;

info.FileName = strCurrentDir+"\\index.html";

Process.Start(info);

Tracés graphiques

Graphics graphic;

Pen pen;

graphic = CreateGraphics();

pen = new Pen(Color.Blue); // sélectioner la couleur

graphic.DrawLine(pen, X, Y); // tracer une ligne

Accueil ] Remonter ]