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


Les onglets sous Windows CE 3.0
 
   


Etant donné la taille de l'écran d'un Pocket PC, il est parfois utile d'éviter de multiplier les boites de dialogue. Un moyen d'éviter cette surcharge est de créer une seule boite de dialogue, contenant plusieurs onglets.

Pour ce faire, on utilise les classes CPropertySheet et CPropertyPage. La classe CPropertSheet représente un livre pouvant contenir plusieurs pages, la classe CPropertyPage correspondant aux pages du livre. La classe CPropertySheet ne derive pas de la classe CDialog. Ce n'est donc pas une DialogBox.

Voilà un exemple d'utilisation :

Voyons ce que ça donne du point de vue de la programmation :

Il convient d'abord de créer des ressources de type dialogue correspondant aux différentes pages que l'on veut créer marqué par un onglet tel un marque page. Dans notre cas, nous ferons un livre muni de 2 onglets. On utilise la ResourceView pour créer les ressources de dialogue :

Appelons les par exemple IDD_ONGLET1 et IDD_ONGLET2. Il faut ensuite créer les classes correspondant à ces onglets, en les faisant dériver de CPropertyPage. Pour créer les classes correpondantes, il suffit de double cliquer sur la ressource dialogue créée, on obtient alors la boite de dialogue suivante :

On choisit Create a new class, que l'on nomme COnglet1, dérivant de CPropertyPage. Il convient de vérifier que le Dialog ID correspond à l'ID de la boite de dialogue (IDD_ONGLET1 dans notre cas). Même chose pour l'autre onglet.

On obtient donc le code suivant :

Dans Onglet1.h :

class COnglet1 : public CPropertyPage
{
...
}

Et dans Onglet2.h :

class COnglet2 : public CPropertyPage
{
...
}

On a donc créé les 2 onglets de notre livre, mais nous ne les avons pas encore rassemblé dans notre livre.


Pour ce faire, on créé donc une classe que l'on va appeler CSheet dérivant d'un CPropertySheet. On utilise donc le classwizard pour créer cette classe (Insert - New Class), on choisit de créer une classe de type MFC Class, on nomme cette classe, et on sélectionne la class de base CPropertySheet.

Dans les attributs publics de la classe CSheet, nous déclarons des instances des classes COnglet1 et COnglet2 :

class Csheet : public CPropertySheet
 {
    ...
 
    // Attributes
    public:
        COnglet1 onglet1;
        COnglet2 onglet2;
 
     …
 
 }

Dans le constructeur de notre classe, nous attachons les onglets créés dans le constructeur, ce qui à pour effet de les lier à notre pseudo livre que notre visuel va représenter :

Csheet::Csheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
  :CPropertySheet(pszCaption, pParentWnd, iSelectPage)
 {
     AddPage(&onglet1); 
     AddPage(&onglet2);
  }

Il suffit maintenant de créer une instance de notre livre au moment où on souhaite l'utiliser et de l'afficher comme une boite de dialogue :

CSheet sheet (_T("Titre de la boite de dialogue"));
sheet.DoModal ();

Attention !

L'événement Ok généré par le bouton OK des PropertyPage ne ferme pas le visuel comme cela aurait été le cas pour une DialogBox. Il a plus un effet de type Validation (APPLY). Afin de contourner le problème, il suffit d'atteindre la classe parent CSheet et d'utiliser la methode EndDialog(…) de celle-ci de la façon suivante :

(Csheet*)GetParent()->EndDialog(IDOK);

On met IDOK si on souhaite fermer sur l'événement OK et IDCANCEL si on souhaite fermer événement Cancel de la class CPropertySheet.

Bien que cette class ne dérive pas d'une class CDialog, le traitement est quasi similaire. La méthode DoModal() , permet l'affichage de la fenêtre et renvoie à sa sortie des codes de retour de type IDOK ou IDCANCEL.

 

 
       
   
 
   
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.